簡體   English   中英

Django UserCreationForm修改:密碼未設置

[英]Django UserCreationForm modification: password not setting

使用此設置,當有人在注冊頁面上提交表單時,密碼不會存儲。 但是,用戶名和電子郵件已存儲。 一切都能正確顯示,並且“ password1”和“ password2”鏈接到網頁中的“ Password”和“ Password Confirm”輸入字段。 使用默認的UserCreationForm可以正常工作。 有人知道我缺少什么代碼嗎?

forms.py:

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm

class MyRegistrationForm(UserCreationForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']

    def save(self, commit=True):
        user = super(UserCreationForm, self).save(commit=False)
        user.email = self.cleaned_data['email']

        if commit:
            user.save()

        return user

views.py:

from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect
from django.contrib import auth
from django.core.context_processors import csrf
from mainsite.forms import MyRegistrationForm

...

def register_user(request):
    if request.method == 'POST':
        form = MyRegistrationForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/accounts/register_success')
    args = {}
    args.update(csrf(request))

    args['form'] = MyRegistrationForm()

    return render_to_response('directory/register.html', args)

def register_success(request):
    return render_to_response('directory/register_success.html')

register.html:

{% extends "directory/base.html" %}

{% block content %}

<h2>Register</h2>
<form action="/accounts/register/" method="post">{% csrf_token %}
    {{ form }}
<input type="submit" value="register" />

</form>

{% endblock %}

我正在處理Mike Hibbert的Django教程中完全相同的代碼。 這里也回答了這個問題: django-成功注冊后未設置密碼

保存表單時,請在MyRegistrationForm而不是UserCreationForm上調用super:

def save(self, commit=True):
    user = super(MyRegistrationForm, self).save(commit=False)
    ...

嘗試這個:

user.email = self.cleaned_data['email']
user.set_password(self.cleaned_data['password1'])
user.save()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM