From 1b1d93071b69d4b2d5de08a779607c16646ac353 Mon Sep 17 00:00:00 2001 From: gzbender Date: Fri, 27 Sep 2019 21:46:33 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BD=D0=BE=D0=B2=D1=8B=D1=85=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D0=B5=D0=B9=20=D0=B2=20=D0=B2=D0=BE=D1=80=D0=BE=D0=BD?= =?UTF-8?q?=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/auth/forms.py | 7 +++++++ apps/auth/views.py | 48 +++++++++++++++++++++++++++++++++++++++++++--- project/urls.py | 2 ++ 3 files changed, 54 insertions(+), 3 deletions(-) diff --git a/apps/auth/forms.py b/apps/auth/forms.py index e369a8f9..f9017dcb 100644 --- a/apps/auth/forms.py +++ b/apps/auth/forms.py @@ -1,4 +1,5 @@ from django import forms +from phonenumber_field.formfields import PhoneNumberField class LearnerRegistrationForm(forms.Form): @@ -6,3 +7,9 @@ class LearnerRegistrationForm(forms.Form): last_name = forms.CharField() email = forms.EmailField() password = forms.CharField() + + +class LandingRegistrationForm(forms.Form): + name = forms.CharField(required=True) + email = forms.EmailField(required=True) + phone = PhoneNumberField(required=True) diff --git a/apps/auth/views.py b/apps/auth/views.py index f9f3de1c..a056c6ed 100644 --- a/apps/auth/views.py +++ b/apps/auth/views.py @@ -1,14 +1,17 @@ +import string + import os import logging from uuid import uuid4 -from urllib.parse import urlsplit +from urllib.parse import urlsplit, urlencode +from django.db.models import Q from facepy import GraphAPI from facepy.exceptions import FacepyError from django.contrib.auth import get_user_model, logout, login, views from django.contrib.auth.forms import AuthenticationForm from django.core.files.base import ContentFile -from django.http import JsonResponse +from django.http import JsonResponse, HttpResponse from django.urls import reverse_lazy from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_exempt @@ -19,7 +22,7 @@ from django.conf import settings from apps.notification.utils import send_email from apps.config.models import Config from apps.user.models import Referral -from .forms import LearnerRegistrationForm +from .forms import LearnerRegistrationForm, LandingRegistrationForm from .tokens import verification_email_token @@ -239,3 +242,42 @@ class FacebookLoginOrRegistration(View): login(requests, user=user) self.request.session['referrer'] = None return JsonResponse({"success": True}) + + +class LandingRegistrationView(View): + + def post(self, request, *args, **kwargs): + form = LandingRegistrationForm(request.POST) + if not form.is_valid(): + return HttpResponse(form.errors.as_text()) + phone = form.cleaned_data['phone'] + name = form.cleaned_data['name'].split() + email = form.cleaned_data['email'].lower() + + if User.objects.filter(Q(email=email) | Q(phone=phone)).count(): + return redirect('/p/user-exists') + + user = User( + username=email, + email=email, + phone=phone, + ) + user.first_name = name[0] + if len(name) > 1: + user.last_name = name[1] + password = User.objects.make_random_password(8, string.ascii_lowercase + string.digits) + user.set_password(password) + user.save() + + verification_token = verification_email_token.make_token(user) + url = 'https://%s%s?%s' % (settings.MAIN_HOST, + reverse_lazy('lilcity:verification-email', args=[verification_token, user.id]), + urlencode({'next': 'https://lil.school/p/free-lesson'})) + try: + send_email('Регистрация в Lil School', email, "notification/email/landing_registration.html", url=url, + user=user, password=password) + except Exception as e: + logger.error(str(e)) + + return redirect(url) + diff --git a/project/urls.py b/project/urls.py index 54415f98..e2bee7b0 100644 --- a/project/urls.py +++ b/project/urls.py @@ -18,6 +18,7 @@ from django.contrib import admin from django.views.generic import TemplateView from django.urls import path, include +from apps.auth.views import LandingRegistrationView from apps.content.views import ContestEditView, ContestView, ContestWorkView, contest_work_comment, FAQView from apps.course.views import ( CoursesView, likes, coursecomment, @@ -104,6 +105,7 @@ urlpatterns = [ path('faq', FAQView.as_view(), name='faq'), path('links', LinksView.as_view(), name='links'), path('prices', PackagesView.as_view(), name='packages'), + path('landing-registration', LandingRegistrationView.as_view(), name='landing-registration'), ]