Пароль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: Вы должны давать / в конце каждого маршрута.

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