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'), ]