You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django自定义User模型创建用户时密码未加密问题求助

解决Django自定义User模型后台创建用户密码不哈希的问题

问题根源是默认Django Admin未针对你的自定义User模型启用内置的密码哈希逻辑,导致创建用户时密码直接明文存储。只需自定义用户管理表单和Admin类,就能复用Django的密码处理机制。

步骤1:在admin.py中自定义表单与UserAdmin类

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import User

# 自定义用户创建表单,复用Django的密码验证与哈希逻辑
class CustomUserCreationForm(UserCreationForm):
    class Meta(UserCreationForm.Meta):
        model = User
        fields = ('username', 'is_granted')  # 按需添加你的自定义字段

# 自定义用户修改表单
class CustomUserChangeForm(UserChangeForm):
    class Meta(UserChangeForm.Meta):
        model = User
        fields = ('username', 'is_active', 'is_granted', 'is_staff', 'is_superuser')

# 自定义UserAdmin,绑定自定义表单
class UserAdmin(BaseUserAdmin):
    form = CustomUserChangeForm
    add_form = CustomUserCreationForm

    # 后台列表展示字段
    list_display = ('username', 'is_active', 'is_granted', 'is_staff')
    # 编辑页面字段分组
    fieldsets = (
        (None, {'fields': ('username', 'password')}),
        ('权限配置', {'fields': ('is_active', 'is_granted', 'is_staff', 'is_superuser')}),
        ('系统信息', {'fields': ('last_login', 'date_joined')}),
    )
    # 创建用户页面字段
    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('username', 'password1', 'password2', 'is_granted'),
        }),
    )

# 注册自定义User模型与对应Admin类
admin.site.register(User, UserAdmin)

步骤2:确认settings.py的用户模型配置

确保项目配置中已指定自定义用户模型:

AUTH_USER_MODEL = '你的应用名.User'

配置完成后,Django后台创建或修改用户时,密码会自动通过内置哈希算法处理,不再明文存储。你可根据业务需求调整fields、list_display等配置项,匹配自定义模型的字段。

内容的提问来源于stack exchange,提问作者SUIN ROH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 12:35:05