Проверьте, пожалуйста, правильно ли я выполнил функцию "register" в django

Я новичок в django, не могли бы вы проверить, правильно ли я сделал функцию "register", без применения djang1o форм, потому что мне трудно это сделать, поэтому я выбрал этот способ [введите описание изображения здесь]

Пожалуйста, не пишите пользовательскую логику для создания объектов модели. Например, в представлении, которое вы здесь используете, вы не проверяете, появляются ли элементы в данных request.POST, более того, вы создаете объект Customers, даже если позже окажется, что это имя пользователя используется. Таким образом, это делает логику более сложной, а представление менее надежным.

Также мне не совсем понятно, зачем вы повторяете данные и в Customer, и в User, это вводит дублирование данных. Если позже пользователь изменит свой email, то вам придется обновлять и User и Customer, что усложняет представление. Обычно для этого используется ForeignKey для ссылки на пользователя. Модель пользователя по умолчанию даже имеет поля first_name и last_name, поэтому ваша модель Customers не добавляет столько дополнительной информации. Таким образом, вы можете смоделировать пользователя следующим образом:

from django.conf import settings

class Customer(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE
    )

Затем мы можем подклассифицировать CreateUserForm и добавить поля first_name, last_name и email:

# app_name/forms.py

from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm

class CustomCreateUserForm(UserCreationForm):
    class Meta:
        model = get_user_model()
        fields = ('username', 'email', 'first_name', 'last_name')

Затем в представлении мы можем исправить работу с этой формой:

from app_name.forms import CustomCreateUserForm

def register(request):
    if request.method == 'POST':
        form = CustomUserCreateForm(request.POST)
        if form.is_valid():
            user = form.save()
            Customer.objects.create(user=user)
            return redirect('login_user')
    elif 'password2' in form.errors:
        messages.info(request, 'Both passwords are not matching')
    elif 'username' in form.errors:
        messages.info(request, 'Username is already taken')
    elif 'email' in form.errors:
        messages.info(request, 'Email is already taken')
    return render(request, 'compte/register.html')

В HTML-форме вы используете password2 вместо repassword, а first_name и last_name вместо fname и lname. Форма также будет проверять, что адрес электронной почты является действительным адресом электронной почты, а не просто / или !.

Вернуться на верх