diff --git a/bootcamp/users/forms.py b/bootcamp/users/forms.py new file mode 100644 index 000000000..21a132a1a --- /dev/null +++ b/bootcamp/users/forms.py @@ -0,0 +1,29 @@ +from django import forms +from django.contrib.auth.forms import UserCreationForm +from django.core.exceptions import ValidationError +from django.contrib.auth.password_validation import validate_password +from .models import * + +class CustomUserCreationForm(UserCreationForm): + password1 = forms.CharField( + label="Password", + widget=forms.PasswordInput, + validators=[validate_password], # validates the password + ) + password2 = forms.CharField( + label="Password confirmation", + widget=forms.PasswordInput, + help_text="Enter the same password as above, for verification.", + ) + + class Meta: + model = User + fields = ("username", "email") + + def clean_password2(self): + # Checks that the two password entries match + password1 = self.cleaned_data.get("password1") + password2 = self.cleaned_data.get("password2") + if password1 and password2 and password1 != password2: + raise forms.ValidationError("Passwords do not match.") + return password2 diff --git a/bootcamp/users/models.py b/bootcamp/users/models.py index 42556bf17..533594992 100755 --- a/bootcamp/users/models.py +++ b/bootcamp/users/models.py @@ -1,4 +1,4 @@ -from django.contrib.auth.models import AbstractUser +from django.contrib.auth.models import AbstractUser, UserManager from django.contrib.auth.signals import user_logged_in, user_logged_out from django.db import models from django.urls import reverse diff --git a/bootcamp/users/urls.py b/bootcamp/users/urls.py index 69414f47e..14b696219 100755 --- a/bootcamp/users/urls.py +++ b/bootcamp/users/urls.py @@ -1,4 +1,5 @@ from django.conf.urls import url +from django.urls import path from . import views @@ -12,4 +13,5 @@ view=views.UserDetailView.as_view(), name="detail", ), + path('signup/',views.UserCreateView.as_view(), name="signup"), ] diff --git a/bootcamp/users/views.py b/bootcamp/users/views.py index d670fdcd2..a058e5a0b 100755 --- a/bootcamp/users/views.py +++ b/bootcamp/users/views.py @@ -1,8 +1,21 @@ from django.contrib.auth.mixins import LoginRequiredMixin +from django.shortcuts import redirect from django.urls import reverse -from django.views.generic import DetailView, ListView, RedirectView, UpdateView +from django.views.generic import DetailView, ListView, RedirectView, UpdateView, CreateView from .models import User +from .forms import * +from django.contrib.auth import login + +class UserCreateView(CreateView): + form_class = CustomUserCreationForm + template_name = "account/signup.html" + + def form_valid(self, form): + # Log the user in upon successful registration + user = form.save() + login(self.request, user) + return redirect("users:detail", username=user.username) class UserDetailView(LoginRequiredMixin, DetailView):