From e58cb2152229d69e92df20a2ccb6fa21d36d322d Mon Sep 17 00:00:00 2001 From: Y Paing Date: Wed, 5 Feb 2025 16:24:12 -0500 Subject: [PATCH] adding new user registration form --- README.md | 9 --------- mysite/settings.py | 1 + ponder/forms.py | 14 ++++++++++++++ ponder/templates/ponder/base.html | 1 + ponder/templates/ponder/login.html | 1 + ponder/templates/ponder/register.html | 10 ++++++++++ ponder/urls.py | 1 + ponder/views.py | 17 +++++++++++++++-- 8 files changed, 43 insertions(+), 11 deletions(-) create mode 100644 ponder/templates/ponder/register.html diff --git a/README.md b/README.md index 789e762..cec4793 100644 --- a/README.md +++ b/README.md @@ -127,12 +127,3 @@ To build the Docker image: ## User Roles The app has a complex relationship between different kinds of users. The roles are described in our [wiki](https://github.com/ponder-lab/Imperative-DL-Study-Web-App/wiki/Roles). - -## Admin Account - -Field | Value --- | -- -Username | admin -Password | umjawaRZ7GY5C7Q - -You can use this to register for accounts in the web app that is deployed on Heroku. diff --git a/mysite/settings.py b/mysite/settings.py index 82ea5b4..28bb557 100644 --- a/mysite/settings.py +++ b/mysite/settings.py @@ -95,6 +95,7 @@ 'default': dj_database_url.config(conn_max_age=600) } +# Custom DB config. # DATABASES = { # # 'default': { # # 'ENGINE': 'django.db.backends.mysql', diff --git a/ponder/forms.py b/ponder/forms.py index 5f324c1..cc04741 100644 --- a/ponder/forms.py +++ b/ponder/forms.py @@ -6,6 +6,20 @@ from ponder.models import Categorization, ProblemCategory, ProblemCause, ProblemFix, ProblemSymptom, Categorizer +class UserRegistrationForm(forms.ModelForm): + password = forms.CharField(label='Password', widget=forms.PasswordInput) + password2 = forms.CharField(label='Repeat password', widget=forms.PasswordInput) + + class Meta: + model = User + fields = ('username', 'first_name', 'last_name', 'email') + + def clean_password2(self): + cd = self.cleaned_data + if cd['password'] != cd['password2']: + raise forms.ValidationError('Passwords don\'t match.') + return cd['password2'] + class UserForm(forms.ModelForm): password = forms.CharField(widget=forms.PasswordInput()) class Meta(): diff --git a/ponder/templates/ponder/base.html b/ponder/templates/ponder/base.html index f9291db..8846c1d 100644 --- a/ponder/templates/ponder/base.html +++ b/ponder/templates/ponder/base.html @@ -20,6 +20,7 @@
  • Logout
  • {% else %}
  • Login
  • +
  • Register
  • {% endif %} diff --git a/ponder/templates/ponder/login.html b/ponder/templates/ponder/login.html index 8429250..c95eab0 100644 --- a/ponder/templates/ponder/login.html +++ b/ponder/templates/ponder/login.html @@ -11,5 +11,6 @@

    Login here :

    +

    Or Register here

    {% endblock %} \ No newline at end of file diff --git a/ponder/templates/ponder/register.html b/ponder/templates/ponder/register.html new file mode 100644 index 0000000..cf7f2a9 --- /dev/null +++ b/ponder/templates/ponder/register.html @@ -0,0 +1,10 @@ +{% extends 'ponder/base.html' %} + +{% block body_block %} +

    Register

    +
    + {% csrf_token %} + {{ form.as_p }} + +
    +{% endblock %} \ No newline at end of file diff --git a/ponder/urls.py b/ponder/urls.py index 1c1bf03..e527174 100644 --- a/ponder/urls.py +++ b/ponder/urls.py @@ -18,4 +18,5 @@ path('success_categorization/', views.success_categorization, name='success_categorization'), path('forbidden/', views.permission_denied, name='permission_denied'), path('categorizers/new', views.AddCategorizer, name='categorizers_add'), + path('register/', views.register, name='register'), ] \ No newline at end of file diff --git a/ponder/views.py b/ponder/views.py index 702d60c..de20613 100644 --- a/ponder/views.py +++ b/ponder/views.py @@ -7,12 +7,12 @@ from django_filters import FilterSet from django_filters.views import FilterView from django.http import HttpResponse, HttpResponseRedirect -from django.shortcuts import render +from django.shortcuts import render, redirect from django.urls import reverse from django.utils.html import format_html from django_tables2 import SingleTableView, SingleTableMixin -from ponder.forms import CategorizationForm, CategorizerForm +from ponder.forms import CategorizationForm, CategorizerForm, UserRegistrationForm from .models import Categorization, User, BugFix, Categorizer, CommitDetail, Commit, ProblemCategory, ProblemCause, \ ProblemFix, ProblemSymptom from .tables import Categorizations_FilterTable, BugFixes_FilterTable, BugFixesTable, CommitDetailsTable, CommitsTable @@ -41,6 +41,19 @@ def index(request): context = {'projects': parts, 'groups': groups} return render(request, 'ponder/index.html', context) +def register(request): + if request.method == 'POST': + form = UserRegistrationForm(request.POST) + if form.is_valid(): + new_user = form.save(commit=False) + new_user.set_password(form.cleaned_data['password']) + new_user.save() + login(request, new_user) + return redirect('index') + else: + form = UserRegistrationForm() + return render(request, 'ponder/register.html', {'form': form}) + @login_required def special(request): return HttpResponse("You are logged in")