Регистрация новых пользователей в воронке

remotes/origin/hotfix/landing-validation
gzbender 6 years ago
parent 0f2bd22e4a
commit 1b1d93071b
  1. 7
      apps/auth/forms.py
  2. 48
      apps/auth/views.py
  3. 2
      project/urls.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)

@ -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)

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

Loading…
Cancel
Save