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 %} +
+ {% csrf_token %} +
+ Log In + {{ form|crispy }} +
+
+ +
+
+
+ + Need An Account? Sign Up Now + +
+
+{% 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 %} + +
+ {% csrf_token %} +
+ Claim your Push-Up Status + {{ form|crispy }} +
+
+ +
+
+
+{% 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