Как правильно сделать представление регистрации в django

Я сделал представление регистрации в Django, но оно не работает, оно хранится в базе данных и все такое, но я не могу войти в систему с данными, сохраненными этим представлением, в то время как я могу войти в систему с пользователем, которого я создал с помощью manage.py createsuperuser вот мой вид регистрации

def signup(request):
if request.method == 'POST':
    user = User.objects.create(
        username=request.POST['username'],
        password=request.POST['password'],
        email=request.POST['email'],
        first_name=request.POST['first_name'],
        last_name=request.POST['last_name'],
    )
    user.save()
    return HttpResponseRedirect(reverse('posts'))
else:
    signupform = SignUpForm()
    return render(request, 'users/signup.html', {'form': signupform})

и вот моя форма подписки

class SignUpForm(forms.Form):
    
    username = forms.CharField(max_length=30, required=True)
    password = forms.CharField(widget=forms.PasswordInput(), required=True)
    email = forms.EmailField(required=True)
    first_name = forms.CharField(required=True)
    last_name = forms.CharField(required=True)

Мне просто нужно знать, что именно не так и как это исправить, или чему мне нужно научиться, чтобы выполнить это задание правильно.

В вашем коде есть несколько вещей, которые сделаны неправильно. Но главная проблема заключается в том, что вы не хэшируете пароль перед его сохранением.

from django.contrib.auth.hashers import make_password,


def signup(request):
    if request.method == 'POST':
        user = User.objects.create(
            username=request.POST['username'],
            password=make_password(request.POST['password']),
            email=request.POST['email'],
            first_name=request.POST['first_name'],
            last_name=request.POST['last_name'],
        )
        return HttpResponseRedirect(reverse('posts'))
    else:
        signupform = SignUpForm()
        return render(request, 'users/signup.html', {'form': signupform})

Этот код решает вашу проблему. Но если вы хотите сделать это более корректно, вы должны проверять данные перед сохранением с помощью формы и сохранять форму, а не создавать пользователя в представлении. Вы можете прочитать об этом в документации

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