From e8626a50ac93985e8b167f69003af537fb7265f3 Mon Sep 17 00:00:00 2001
From: Rushil Umaretiya <2023rumareti@tjhsst.edu>
Date: Mon, 19 Oct 2020 04:17:34 -0400
Subject: [PATCH] finished most of the work!
---
admin.py | 5 +++
config/settings.py | 11 +++++-
config/urls.py | 4 +-
pushup/admin.py | 2 +-
pushup/templates/pushup/index.html | 2 +
users/forms.py | 11 ++++++
users/migrations/0004_auto_20201019_0359.py | 21 ++++++++++
users/migrations/0005_auto_20201019_0407.py | 23 +++++++++++
users/models.py | 6 ++-
users/templates/users/base.html | 31 +++++++++++++++
users/templates/users/login.html | 31 +++++++++++++++
users/templates/users/signup.html | 27 +++++++++++++
users/views.py | 43 +++++++++++++++++++--
13 files changed, 207 insertions(+), 10 deletions(-)
create mode 100644 admin.py
create mode 100644 users/forms.py
create mode 100644 users/migrations/0004_auto_20201019_0359.py
create mode 100644 users/migrations/0005_auto_20201019_0407.py
create mode 100644 users/templates/users/base.html
create mode 100644 users/templates/users/login.html
create mode 100644 users/templates/users/signup.html
diff --git a/admin.py b/admin.py
new file mode 100644
index 0000000..bf0ecde
--- /dev/null
+++ b/admin.py
@@ -0,0 +1,5 @@
+from django.contrib import admin
+from .models import StockValue
+
+# Register your models here.
+admin.site.register(StockValue)
\ No newline at end of file
diff --git a/config/settings.py b/config/settings.py
index 26291c6..05816cc 100644
--- a/config/settings.py
+++ b/config/settings.py
@@ -44,7 +44,8 @@ INSTALLED_APPS = [
'django.contrib.staticfiles',
'django_extensions',
- 'django_secrets'
+ 'django_secrets',
+ 'crispy_forms'
#'chartjs',
]
@@ -129,4 +130,10 @@ USE_TZ = True
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
-)
\ No newline at end of file
+)
+
+CRISPY_TEMPLATE_PACK = 'bootstrap4'
+
+LOGIN_URL = 'login'
+LOGOUT_URL = 'logout'
+LOGIN_REDIRECT_URL = 'home'
\ No newline at end of file
diff --git a/config/urls.py b/config/urls.py
index 1bf4b4a..df8fc18 100644
--- a/config/urls.py
+++ b/config/urls.py
@@ -16,13 +16,15 @@ Including another URLconf
from django.contrib import admin
from django.urls import path
+from django.contrib.auth import views as auth_views
+
from pushup import views as pushup_views
from users import views as users_views
urlpatterns = [
path('admin/', admin.site.urls),
path('', pushup_views.home, name="home"),
- path('login/', users_views.login, name="login"),
+ path('login/', auth_views.LoginView.as_view(template_name='users/login.html'), name='login'),
path('signup/', users_views.signup, name="signup"),
path('logout/', users_views.logout, name="logout")
]
diff --git a/pushup/admin.py b/pushup/admin.py
index bf0ecde..5fa4bb6 100644
--- a/pushup/admin.py
+++ b/pushup/admin.py
@@ -2,4 +2,4 @@ from django.contrib import admin
from .models import StockValue
# Register your models here.
-admin.site.register(StockValue)
\ No newline at end of file
+admin.site.register(StockValue)
diff --git a/pushup/templates/pushup/index.html b/pushup/templates/pushup/index.html
index 647c912..267890e 100644
--- a/pushup/templates/pushup/index.html
+++ b/pushup/templates/pushup/index.html
@@ -15,12 +15,14 @@
# |
Name |
Push-Ups |
+ Party |
{% for profile in users %}
{{forloop.counter}} |
{{profile.user.first_name}} {{profile.user.last_name}} |
{{profile.pushups}} |
+ {{profile.party}} |
{% endfor %}
diff --git a/users/forms.py b/users/forms.py
new file mode 100644
index 0000000..2a62870
--- /dev/null
+++ b/users/forms.py
@@ -0,0 +1,11 @@
+from django import forms
+from django.contrib.auth.models import User
+from django.contrib.auth.forms import UserCreationForm
+from .models import Profile
+
+class UserRegisterForm(UserCreationForm):
+ key = forms.CharField(max_length=10, help_text="Enter the one word key that Rushil gave you. If you need a key, just DM rushil or sahishnu")
+
+ class Meta:
+ model = User
+ fields = ['username', 'key', 'password1', 'password2']
\ No newline at end of file
diff --git a/users/migrations/0004_auto_20201019_0359.py b/users/migrations/0004_auto_20201019_0359.py
new file mode 100644
index 0000000..ca2e77d
--- /dev/null
+++ b/users/migrations/0004_auto_20201019_0359.py
@@ -0,0 +1,21 @@
+# Generated by Django 3.1.2 on 2020-10-19 07:59
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ('users', '0003_auto_20201019_0252'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='profile',
+ name='user',
+ field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
+ ),
+ ]
diff --git a/users/migrations/0005_auto_20201019_0407.py b/users/migrations/0005_auto_20201019_0407.py
new file mode 100644
index 0000000..010b615
--- /dev/null
+++ b/users/migrations/0005_auto_20201019_0407.py
@@ -0,0 +1,23 @@
+# Generated by Django 3.1.2 on 2020-10-19 08:07
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('users', '0004_auto_20201019_0359'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='profile',
+ name='first_name',
+ field=models.TextField(blank=True, max_length=25, null=True),
+ ),
+ migrations.AddField(
+ model_name='profile',
+ name='last_name',
+ field=models.TextField(blank=True, max_length=25, null=True),
+ ),
+ ]
diff --git a/users/models.py b/users/models.py
index 4afa2ca..5db3bba 100644
--- a/users/models.py
+++ b/users/models.py
@@ -4,11 +4,13 @@ from django.contrib.auth.models import User
# Create your models here.
class Profile(models.Model):
- user = models.OneToOneField(User, on_delete=models.CASCADE)
+ user = models.OneToOneField(User, blank=True, null=True, on_delete=models.CASCADE)
key = models.TextField(max_length=20)
pushups = models.DecimalField(max_digits=5, decimal_places=3)
isEnabled = models.BooleanField(default=False)
party = models.TextField(max_length=20)
+ first_name = models.TextField(blank=True, null=True, max_length=25)
+ last_name = models.TextField(blank=True, null=True, max_length=25)
def __str__ (self):
- return f"{self.user.username}'s Profile"
\ No newline at end of file
+ return f"A Profile"
\ No newline at end of file
diff --git a/users/templates/users/base.html b/users/templates/users/base.html
new file mode 100644
index 0000000..e84f160
--- /dev/null
+++ b/users/templates/users/base.html
@@ -0,0 +1,31 @@
+{% load static %}
+
+
+
+
+ Pushup Contest
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% block content %}
+ {% endblock content %}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/users/templates/users/login.html b/users/templates/users/login.html
new file mode 100644
index 0000000..1e4831a
--- /dev/null
+++ b/users/templates/users/login.html
@@ -0,0 +1,31 @@
+{% extends 'users/base.html' %}
+{% load crispy_forms_tags %}
+{% block content %}
+
+ {% if messages %}
+ {% for message in messages %}
+
+ {{ message }}
+
+
+ {% endfor %}
+ {% endif %}
+
+
+
+{% endblock content %}
\ No newline at end of file
diff --git a/users/templates/users/signup.html b/users/templates/users/signup.html
new file mode 100644
index 0000000..034acfb
--- /dev/null
+++ b/users/templates/users/signup.html
@@ -0,0 +1,27 @@
+{% extends 'users/base.html' %}
+{% load crispy_forms_tags %}
+{% block content %}
+
+ {% if messages %}
+ {% for message in messages %}
+
+ {{ message }}
+
+
+ {% endfor %}
+ {% endif %}
+
+
+
+{% endblock content %}
\ No newline at end of file
diff --git a/users/views.py b/users/views.py
index 8c4d4dd..bec605d 100644
--- a/users/views.py
+++ b/users/views.py
@@ -1,4 +1,4 @@
-from django.shortcuts import render
+from django.shortcuts import render, redirect
from django.contrib.auth import authenticate
from django.contrib.auth import login as auth_login
@@ -6,14 +6,49 @@ from django.contrib.auth import logout as auth_logout
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
+from .forms import UserRegisterForm
+from .models import Profile
+
+from django.contrib import messages
+
# Create your views here.
def login(request):
- return None
+ return render(request, 'users/login.html')
def signup(request):
- return None
+ if request.POST:
+ print(request.POST)
+ form = UserRegisterForm(request.POST)
+ if form.is_valid():
+ key = form.cleaned_data.get('key')
+ if Profile.objects.filter(key=key).count() == 1:
+ profile = Profile.objects.get(key=key)
+ if profile.isEnabled == False:
+ instance = form.save(commit=False)
+ instance.save()
+ instance.first_name = profile.first_name
+ instance.last_name = profile.last_name
+ instance.save()
+ profile.user = instance
+ profile.isEnabled = True
+ profile.save()
+ messages.success(request, f'Your account has been created! You are now able to log in')
+ return redirect('login')
+ else:
+ messages.error(request, 'This account is alr activation', extra_tags='danger')
+ else:
+ messages.error(request, 'Looks like your key was invalid!', extra_tags='danger')
+ else:
+ messages.error(request, 'Looks like there were some problems with your form!', extra_tags='danger')
+
+ form = UserRegisterForm()
+
+ return render(request, 'users/signup.html', {'form': form})
+
@login_required
def logout(request):
auth_logout(request)
- return render(request, 'users/logout.html')
\ No newline at end of file
+ return redirect('/')
+
+
\ No newline at end of file