Django:无效的密码格式或未知的散列算法

pro*_*san 3 django django-admin django-users

当我想使用简单的CreateView创建新用户时,我有问题.一切都很好,我可以创建用户,但是当我想用新创建的用户进行日志记录时,我无法做到.

我在admin中输入了这种类型的密码:

无效的密码格式或未知的散列算法.

未存储原始密码,因此无法查看此用户的密码,但您可以使用此表单更改密码.

这是我的代码:

model.py

from django.db import models
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import AbstractUser, UserManager


    class CustomUser(AbstractUser):
        """app setting of user"""
        url = models.URLField(u'Site URL', max_length=100, null=True, unique=True)

    admin.site.register(CustomUser, UserAdmin)
Run Code Online (Sandbox Code Playgroud)

urls.py

from django.conf.urls.defaults import *
from models import CustomUser
from django.views.generic import CreateView
from django.contrib.auth.decorators import login_required
from django.core.urlresolvers import reverse

    urlpatterns = patterns('',
                   url(r'^create_user/$',(CreateView.as_view(model=CustomUser,       get_success_url =lambda: reverse('create_user'),
                                                                             template_name="create_user.html")), name='create_user'),
                   )
Run Code Online (Sandbox Code Playgroud)

create_user.html

<div title="Create Form " id="/create_user">
        <p> <b>Create account:</b> </p>            
        {{ form.errors }}
    <form action="" method="post" id="id_create_user" >
        {% csrf_token %}
        {{ form.as_p }}
        <div>
            <input type="submit" value="Create account" style="">
        </div>

    </form>
</div>
Run Code Online (Sandbox Code Playgroud)

创建用户后,我必须以管理员身份登录并更改此密码,之后一切都会好的.我的问题的例子

我该怎么做才能解决问题?

谢谢!

And*_*ram 6

问题是CreateView正在基于模型自动生成表单,这意味着它直接写入密码字段而不是使用正确的API来创建用户.

请尝试使用此表单,它将为您处理:

from django.contrib.auth.forms import UserCreationForm

urlpatterns = patterns('',
   url(r'^create_user/$',(CreateView.as_view(model=CustomUser, get_success_url =lambda: reverse('create_user'), form_class=UserCreationForm, template_name="create_user.html")), name='create_user'),
)
Run Code Online (Sandbox Code Playgroud)

这些表单基本上与您在管理员中看到的相同,这是一个很好的起点,如果您使用自定义用户模型,您可能需要做一些额外的工作来获取您的自定义.

这是提供的UserCreationForm的源代码:https://github.com/django/django/blob/stable/1.5.x/django/contrib/auth/forms.py#L61-L110

你可以自己重新实现它作为一个普通的ModelForm,你必须包括的关键user.set_password是调用的save方法.