无效的密码格式或未知的散列算法Django创建查看用户

时间:2017-02-15 19:52:06

标签: django django-admin

我使用创建视图在系统中创建用户,但管理员一直表示存在"无效的密码格式或未知的散列算法。"对于用户?我使用框架提供的UserCreationForm

from django.views.generic.edit import CreateView
from django.contrib.auth.forms import UserCreationForm

class UserCreate(CreateView):
    model = User
    form = UserCreationForm
    fields = ('username', 'first_name', 'last_name', 'password')
    template_name = 'exts/user_create.html'

    def get_success_url(self):
        # login the person
        self.object.backend = 'django.contrib.auth.backends.ModelBackend'
        auth_login(self.request, self.object)
        # now return the success url
        return '/'

    def get_form(self, form_class=None):
        form = super(CreateView, self).get_form(form_class)
        form.fields['password'].widget = forms.PasswordInput()
        return form

3 个答案:

答案 0 :(得分:2)

在使用Django的默认用户模型时,密码在存储之前已加密。因此,您不能像其他字段一样简单地设置用户的密码。您应该使用用户模型的set_password('MyPassword')方法覆盖您的保存方法以设置密码

答案 1 :(得分:1)

您需要使用form_class而不是form来指定要使用的表单类。

您的字段中还有password,但UserCreationForm未指定password字段。由于它是模型上的有效字段,因此会自动生成表单字段,但不会正确设置密码。

您应该添加password1password2字段:

class UserCreate(CreateView):
    model = User
    form = UserCreationForm
    fields = ('username', 'first_name', 'last_name', 'password1', 'password2')
    ...

答案 2 :(得分:0)

想出来!原来你想使用表单类属性而不是表单和模型属性,现在完美地工作!

class UserCreate(CreateView):
    form_class = UserCreationForm
    template_name = 'exts/user_create.html'
    success_url = '/'

    def get_success_url(self):
        # login the person
        self.object.backend = 'django.contrib.auth.backends.ModelBackend'
        auth_login(self.request, self.object)
        # now return the success url
        return '/'