Пароль1 и пароль2 не сохраняются в форме django
Я создал (CustomUserForm), как показано ниже:
from django.contrib.auth.forms import UserChangeForm
from .models import User
from django import forms
class CustomUserForm(UserChangeForm):
username = forms.CharField(
widget=forms.TextInput(attrs={'class': 'form-control my-2', 'placeholder': 'Enter Username'}))
email = forms.CharField(
widget=forms.TextInput(attrs={'class': 'form-control my-2', 'placeholder': 'Enter The Email'}))
password1 = forms.CharField(
widget=forms.PasswordInput(attrs={'class': 'form-control my-2', 'placeholder': 'Enter The Password'}))
password2 = forms.CharField(
widget=forms.PasswordInput(attrs={'class': 'form-control my-2', 'placeholder': 'Confirm Password'}))
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
и соответствующее представление для создания нового пользователя:
from django.shortcuts import render, redirect
from django.contrib import messages
from store.forms import CustomUserForm
def register(request, self):
form = CustomUserForm()
if request.method == 'POST':
form = CustomUserForm(request.POST)
if form.is_valid():
form.save()
messages.success(request, "Registered Successfully")
return redirect('/login')
context = {'form': form}
return render(request, 'auth/register.html', context)
def login_page(request):
return render(request, 'auth/login.html')
а это register.html
все работает хорошо, за исключением того, что в базе данных MySQL не создан пароль !!!
При сохранении пароля сохраните его хэш-версию с помощью этого подхода
def register(request, self):
form = CustomUserForm()
if request.method == 'POST':
form = CustomUserForm(request.POST)
if form.is_valid():
form.save(commit=False)
form.password = make_password(form.cleaned_data["password1"])
form.save()
messages.success(request, "Registered Successfully")
return redirect('/login')
context = {'form': form}
return render(request, 'auth/register.html', context)
Я думаю, что пароль должен быть хэширован должным образом, поскольку необработанные пароли не хранятся django.
Вы можете использовать cleaned_data, и вам нужно правильно хэшировать пароль, поэтому вы можете использовать make_password() из from django.contrib.auth.hashers import make_password.
Итак, с вашим текущим кодом сделайте следующие изменения в views.py.
from django.contrib.auth.models import User
from django.contrib.auth.hashers import make_password
def register(request, self):
if request.method == 'POST':
form = CustomUserForm(request.POST)
if form.is_valid():
username=form.cleaned_data['username']
email=form.cleaned_data['email']
password=make_password(form.cleaned_data['password1'])
data=User(username=username,email=email,password=password)
data.save()
messages.success(request, "Registered Successfully")
return redirect('/login/')
else: #Here GET condition
form = CustomUserForm()
context = {'form': form}
return render(request, 'auth/register.html', context)
Note:Вы должны давать/в конце каждого маршрута.