Method account.register fix

This commit is contained in:
vlados31 2022-09-19 00:11:08 +03:00
parent 63d40fd39e
commit 105b30f68c
4 changed files with 35 additions and 17 deletions

View File

@ -1,5 +1,6 @@
from django.db import models from django.db import models
from django.contrib.auth.models import PermissionsMixin, AbstractBaseUser, BaseUserManager from django.contrib.auth.models import PermissionsMixin, AbstractBaseUser, BaseUserManager
from django.core.validators import *
class SiteAccountManager(BaseUserManager): class SiteAccountManager(BaseUserManager):
@ -39,7 +40,11 @@ class SiteUser(AbstractBaseUser, PermissionsMixin):
surname = models.CharField(max_length=60, verbose_name="Фамилия") surname = models.CharField(max_length=60, verbose_name="Фамилия")
name = models.CharField(max_length=60, verbose_name="Имя") name = models.CharField(max_length=60, verbose_name="Имя")
email = models.EmailField(unique=True, verbose_name="Email") 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="Разрешение на вход в админку") is_staff = models.BooleanField(default=False, verbose_name="Разрешение на вход в админку")
REQUIRED_FIELDS = ['name', 'surname', 'phone'] REQUIRED_FIELDS = ['name', 'surname', 'phone']
USERNAME_FIELD = 'email' USERNAME_FIELD = 'email'

View File

@ -18,7 +18,7 @@ API_ERROR_INVALID_PASSWORD = (502, 'invalid password')
API_ERROR_INVALID_TOKEN = (503, 'invalid token') 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): def make_error_object(ex: Exception):

View File

@ -1,7 +1,9 @@
from .api_errors import * import traceback
import account.models
from .api_utils import * from .api_utils import *
from .models import * from .models import *
from account.forms import UserCreationForm from django.core.exceptions import ValidationError
def _reqire_access_token(params): def _reqire_access_token(params):
@ -29,20 +31,30 @@ def account_register(params):
email = api_get_param_str(params, "email") email = api_get_param_str(params, "email")
password = api_get_param_str(params, "password") password = api_get_param_str(params, "password")
form = UserCreationForm({ user = account.models.SiteUser(
"email": email, name=name,
"phone": phone, surname=surname,
"name": name, phone=phone,
"surname": surname, email=email,
"password1": password, password=password
"password2": password, )
})
form.validate_unique() try:
if form.is_valid(): user.full_clean()
pass user.save()
else:
raise Exception(API_ERROR_MISSING_ARGUMENT) 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): def account_get(params):

View File

@ -114,6 +114,7 @@ header > * {
@media screen and (max-width: 900px) { @media screen and (max-width: 900px) {
#header-wrapper { #header-wrapper {
display: block; display: block;
margin: 1em 0;
} }
header { header {