Django管理员未哈希自定义用户密码 Python 3 Django 1.5 PostgreSQL 5.0.3

Django管理员未哈希自定义用户密码 Python 3 Django 1.5 PostgreSQL 5.0.3,django,python-3.x,Django,Python 3.x,我是Django的新手&我正在制作一个Django应用程序,它使用AbstractUser,但是当我在Django管理员中创建一个用户,然后在管理员中查看用户的信息时,我看到了纯文本的密码。直接在数据库中检查,我看到密码肯定是以明文形式存储的 我试图编写一些视图来进行身份验证,但即使用户名和密码正确,它也无法工作。因此我猜测authenticate()函数是散列函数,但返回None,因为密码实际上没有散列 密码没有被散列有什么可能的原因吗? 我会发布一些代码,但我认为任何代码都不会有帮助,因为我

我是Django的新手&我正在制作一个Django应用程序,它使用AbstractUser,但是当我在Django管理员中创建一个用户,然后在管理员中查看用户的信息时,我看到了纯文本的密码。直接在数据库中检查,我看到密码肯定是以明文形式存储的

我试图编写一些视图来进行身份验证,但即使用户名和密码正确,它也无法工作。因此我猜测
authenticate()
函数是散列函数,但返回
None
,因为密码实际上没有散列

密码没有被散列有什么可能的原因吗?


我会发布一些代码,但我认为任何代码都不会有帮助,因为我的模型不包含任何对密码字段有任何作用的代码(由Django生成和完成)。如果有我正在做或没有做的事情,我甚至不知道代码的哪一部分,所以我不得不发布我的设置、模型、管理等所有内容。

,因为它直接保存在数据库中。因此,在保存之前,您必须重写对密码进行散列的方法。在表格中添加以下内容:

def save(self, commit=True):
    # Save the provided password in hashed format
    user = super(MyForm, self).save(commit=False)
    user.set_password(self.cleaned_data["password"])
    if commit:
        user.save()
    return user

您可以将表单代码添加到admin.py文件中。但是,您还需要添加form类的定义,不仅仅是save()方法,还需要添加UserAdmin派生类的定义。我认为这个例子将澄清:

class UserCreationForm(forms.ModelForm):
    class Meta:
        model = CustomUser
        fields = ('email',)

    def save(self, commit=True):
        # Save the provided password in hashed format
        user = super(UserCreationForm, self).save(commit=False)
        user.set_password(self.cleaned_data["password"])
        if commit:
            user.save()
        return user


class CustomUserAdmin(UserAdmin):
    # The forms to add and change user instances
    add_form = UserCreationForm
    list_display = ("email",)
    ordering = ("email",)

    fieldsets = (
        (None, {'fields': ('email', 'password', 'first_name', 'last_name')}),
        )
    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('email', 'password', 'first_name', 'last_name', 'is_superuser', 'is_staff', 'is_active')}
            ),
        )

    filter_horizontal = ()

    admin.site.register(CustomUser, CustomUserAdmin)
这应该让你开始。您需要自定义类的字段以匹配用户类的字段


更多信息如下:

我想问题是您在admin.py中继承了来自django.contrib.auth.admin的ModelAdmin而不是UserAdmin

示例代码:

from django.contrib.auth.admin import UserAdmin
from .models import Employee

class EmployeeAdmin(UserAdmin):
    pass

admin.site.register(Employee, EmployeeAdmin)

我没有制作任何表单(我使用的是Django管理员生成的表单),所以我不太明白我的表单在哪里。我把它放在我的admin.py中了吗?如果我不使用表单,如果我使用“CreateView”类来创建用户呢?谢谢你有用的答案。你能详细说明一下他们之间的区别吗?