2015-07-21 59 views
0

使用此設置,當有人在註冊頁面上提交表單時,不會存儲密碼。但是,用戶名和電子郵件已存儲。所有內容都可以準確顯示,其中'password1'和'password2'鏈接到網頁中的「密碼」和「密碼確認」輸入字段。使用默認的UserCreationForm可以正常工作。有誰知道我錯過了什麼代碼?Django 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 %} 

回答

0

試試這個:

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

我正在處理來自Mike Hibbert的Django教程的完全相同的代碼。這個問題也是在這裏找到答案: django - no password set after successful registration

當您保存形式,呼籲MyRegistrationForm而不是UserCreationForm超:

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