From 105b30f68c923006ed67079335a59cb3f4e8ccf4 Mon Sep 17 00:00:00 2001 From: vlados31 Date: Mon, 19 Sep 2022 00:11:08 +0300 Subject: [PATCH] Method account.register fix --- account/models.py | 7 ++++++- api/api_errors.py | 2 +- api/api_methods.py | 42 +++++++++++++++++++++++++++--------------- static/css/style.css | 1 + 4 files changed, 35 insertions(+), 17 deletions(-) diff --git a/account/models.py b/account/models.py index 51b9681..6a53318 100644 --- a/account/models.py +++ b/account/models.py @@ -1,5 +1,6 @@ from django.db import models from django.contrib.auth.models import PermissionsMixin, AbstractBaseUser, BaseUserManager +from django.core.validators import * class SiteAccountManager(BaseUserManager): @@ -39,7 +40,11 @@ class SiteUser(AbstractBaseUser, PermissionsMixin): surname = models.CharField(max_length=60, verbose_name="Фамилия") name = models.CharField(max_length=60, verbose_name="Имя") email = models.EmailField(unique=True, verbose_name="Email") - phone = models.CharField(unique=True, max_length=16, verbose_name="Телефон") + phone = models.CharField(unique=True, max_length=16, verbose_name="Телефон", validators=[ + RegexValidator(regex="^\\+?[0-9]*$"), + MaxLengthValidator(limit_value=16), + MinLengthValidator(limit_value=6) + ]) is_staff = models.BooleanField(default=False, verbose_name="Разрешение на вход в админку") REQUIRED_FIELDS = ['name', 'surname', 'phone'] USERNAME_FIELD = 'email' diff --git a/api/api_errors.py b/api/api_errors.py index 28ce72f..a1c7f32 100644 --- a/api/api_errors.py +++ b/api/api_errors.py @@ -18,7 +18,7 @@ API_ERROR_INVALID_PASSWORD = (502, 'invalid password') API_ERROR_INVALID_TOKEN = (503, 'invalid token') # времненное решение, позже нужно будет заменить на конкретные ошибки -API_ERROR_USER_REGISTER = (510, 'user register error') +API_ERROR_USER_REGISTER = (510, 'user registration error') def make_error_object(ex: Exception): diff --git a/api/api_methods.py b/api/api_methods.py index fbe55a8..5eddbe3 100644 --- a/api/api_methods.py +++ b/api/api_methods.py @@ -1,7 +1,9 @@ -from .api_errors import * +import traceback + +import account.models from .api_utils import * from .models import * -from account.forms import UserCreationForm +from django.core.exceptions import ValidationError def _reqire_access_token(params): @@ -29,20 +31,30 @@ def account_register(params): email = api_get_param_str(params, "email") password = api_get_param_str(params, "password") - form = UserCreationForm({ - "email": email, - "phone": phone, - "name": name, - "surname": surname, - "password1": password, - "password2": password, - }) + user = account.models.SiteUser( + name=name, + surname=surname, + phone=phone, + email=email, + password=password + ) - form.validate_unique() - if form.is_valid(): - pass - else: - raise Exception(API_ERROR_MISSING_ARGUMENT) + try: + user.full_clean() + user.save() + + try: + token = UserToken.create_token(user) + return make_response({"access_token": token.access_token}) + + except Exception as ex: + # если вдруг токен нельзя создать + user.delete() + raise ex + + except ValidationError as e: + traceback.print_exc() + raise Exception(API_ERROR_USER_REGISTER, e.messages) def account_get(params): diff --git a/static/css/style.css b/static/css/style.css index 0b54b43..e0c7b06 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -114,6 +114,7 @@ header > * { @media screen and (max-width: 900px) { #header-wrapper { display: block; + margin: 1em 0; } header {