From 11afdd6efd404a2c0e262d2c82751cc76f4299d9 Mon Sep 17 00:00:00 2001 From: salazard <hamzatouizrat@yahoo.com> Date: Sun, 11 Sep 2022 13:06:21 +0200 Subject: [PATCH] add verification mail --- oser_backend/settings/common.py | 3 ++- oser_backend/urls.py | 2 ++ register/serializers.py | 5 ++++- register/signals.py | 40 ++++++++++++++++++++------------- users/forms.py | 10 +++++++++ 5 files changed, 42 insertions(+), 18 deletions(-) create mode 100644 users/forms.py diff --git a/oser_backend/settings/common.py b/oser_backend/settings/common.py index 478aa5e..cdbf6bd 100644 --- a/oser_backend/settings/common.py +++ b/oser_backend/settings/common.py @@ -38,7 +38,8 @@ DJANGO_APPS = [ 'whitenoise.runserver_nostatic', 'django.contrib.staticfiles', 'django.forms', - 'django.contrib.sites' + 'django.contrib.sites', + "verify_email.apps.VerifyEmailConfig", ] THIRD_PARTY_APPS = [ diff --git a/oser_backend/urls.py b/oser_backend/urls.py index a645eb8..db86f1e 100644 --- a/oser_backend/urls.py +++ b/oser_backend/urls.py @@ -10,6 +10,8 @@ from rest_framework.documentation import include_docs_urls from rest_auth.views import PasswordResetConfirmView urlpatterns = [ + # Mail verification + url(r'^verification/', include('verify_email.urls')), # Admin site url(r'^admin/', admin.site.urls), # Redirect the root to the admin site diff --git a/register/serializers.py b/register/serializers.py index 12b6c58..44624aa 100644 --- a/register/serializers.py +++ b/register/serializers.py @@ -1,5 +1,6 @@ """Register serializers.""" +from urllib import request from django.contrib.auth import get_user_model from rest_framework import serializers @@ -45,14 +46,16 @@ class RegistrationSerializer(serializers.ModelSerializer): """ password = validated_data.pop('password') + request = self.context.get("request") registration = Registration.objects.create(**validated_data) - # Fire a registration_created signal registration_created.send( sender=Registration, instance=registration, password=password, + validated_data=validated_data, + request=request ) return registration diff --git a/register/signals.py b/register/signals.py index 18c9ea0..6a1bd76 100644 --- a/register/signals.py +++ b/register/signals.py @@ -6,27 +6,35 @@ from django.dispatch import Signal, receiver from profiles.models import Student from .models import Registration - +from verify_email.email_handler import send_verification_email +from users.forms import UserForm User = get_user_model() -registration_created = Signal(providing_args=('instance', 'password')) +registration_created = Signal( + providing_args=('instance', 'password', 'request', 'validated_data')) @receiver(registration_created, sender=Registration) -def create_user_and_student(sender, instance: Registration, +def create_user_and_student(sender, instance: Registration, request, validated_data, password: str, **kwargs): """Create a user and student after on a registration_created signal.""" - user = User.objects.create_user( - email=instance.email, - password=password, - first_name=instance.first_name, - last_name=instance.last_name, - phone_number=instance.phone_number, - ) - - Student.objects.create( - user=user, - dateOfBirth=instance.dateOfBirth, - registration=instance, - ) + # user = User.objects.create_user( + # email=instance.email, + # password=password, + # first_name=instance.first_name, + # last_name=instance.last_name, + # phone_number=instance.phone_number, + # is_active=False, + # ) + validated_data['password'] = password + form = UserForm(validated_data) + if form.is_valid(): + user = send_verification_email( + request, form) + Student.objects.create( + user=user, + dateOfBirth=instance.dateOfBirth, + registration=instance,) + else: + print("Probleme lors de la création du user") diff --git a/users/forms.py b/users/forms.py new file mode 100644 index 0000000..f2718cc --- /dev/null +++ b/users/forms.py @@ -0,0 +1,10 @@ +from django.forms import ModelForm, TextInput, EmailInput +from .models import User +from users.models import User + + +class UserForm(ModelForm): + class Meta: + model = User + fields = ["email", "password", "first_name", + "last_name", "phone_number"] -- GitLab