首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django UserCreationForm修改:密码未设置

Django UserCreationForm修改:密码未设置
EN

Stack Overflow用户
提问于 2015-07-21 09:35:51
回答 2查看 1.6K关注 0票数 0

使用此设置,当有人在注册页上提交表单时,密码不会被存储。但是,用户名和电子邮件是存储的。所有内容都会准确显示,网页中的“password1”和“password2”链接到“密码”和“密码确认”输入字段。相反,使用默认的UserCreationForm可以正常工作。有人知道我遗漏了什么密码吗?

forms.py:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
{% 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 %}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-21 09:41:03

试试这个:

代码语言:javascript
复制
user.email = self.cleaned_data['email']
user.set_password(self.cleaned_data['password1'])
user.save()
票数 1
EN

Stack Overflow用户

发布于 2017-10-11 10:37:19

我正在处理来自Mike的Django教程的完全相同的代码。这个问题在这里也得到了回答:django - no password set after successful registration

保存表单时,请在MyRegistrationForm上调用super而不是UserCreationForm:

代码语言:javascript
复制
def save(self, commit=True):
    user = super(MyRegistrationForm, self).save(commit=False)
    ...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31535398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档