【问题标题】:Django UserCreationForm modification: password not settingDjango UserCreationForm 修改:未设置密码
【发布时间】:2015-07-21 09:35:51
【问题描述】:

使用此设置,当有人在注册页面上提交表单时,密码不会被存储。但是,用户名和电子邮件会被存储。一切都显示准确,“密码1”和“密码2”链接到网页中的“密码”和“密码确认”输入字段。使用默认的 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')

注册.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 %}

【问题讨论】:

    标签: django django-forms django-views django-users


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      试试这个:

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

      【讨论】:

        猜你喜欢
        • 2011-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-12
        • 2021-04-27
        • 2012-12-27
        • 2021-02-15
        • 1970-01-01
        相关资源
        最近更新 更多