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
相关产品推荐
相关产品推荐

