Как правильно сделать представление регистрации в 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})
Этот код решает вашу проблему. Но если вы хотите сделать это более корректно, вы должны проверять данные перед сохранением с помощью формы и сохранять форму, а не создавать пользователя в представлении. Вы можете прочитать об этом в документации