Django:密码格式无效或散列算法未知
Posted
技术标签:
【中文标题】Django:密码格式无效或散列算法未知【英文标题】:Django : Invalid password format or unknown hashing algorithm 【发布时间】:2013-02-28 03:00:25 【问题描述】:当我想使用简单的 CreateView 创建新用户时遇到问题。一切正常,我可以创建用户,但是当我想用新创建的用户登录时,我做不到。
我在管理员中获得了这种类型的密码:
密码格式无效或散列算法未知。
未存储原始密码,因此无法查看此用户的密码,但您可以使用此表单更改密码。
这是我的代码:
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)
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'),
)
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>
创建用户后,我必须以管理员身份登录并更改此密码,然后一切正常。
我应该怎么做才能解决这个问题?
谢谢!
【问题讨论】:
【参考方案1】:问题在于 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'),
)
这些表单本质上与您在管理员中看到的相同,这是一个很好的起点,如果您使用的是自定义用户模型,您可能需要做一些额外的工作来进行自定义。
这里是提供的 UserCreationForm 的源代码:https://github.com/django/django/blob/stable/1.5.x/django/contrib/auth/forms.py#L61-L110
你可以自己重新实现它作为一个普通的ModelForm,你必须包含的关键是调用user.set_password
的save方法。
【讨论】:
可以,但是在模板中,我只显示了三个字段,pass、re-pass 和 username.. 但我想显示我的所有字段。 在答案末尾添加了一些内容,应该为您指明正确的方向以上是关于Django:密码格式无效或散列算法未知的主要内容,如果未能解决你的问题,请参考以下文章