django - 继承 AbstractUser 明文 问题处理

zcyuefan 2020-01-17

问题现象

继承了 AbstractUser  之后的扩展用户表, 会出现在使用 admin 时密码明文显示的问题

django - 继承 AbstractUser 明文 问题处理

django - 继承 AbstractUser 明文 问题处理

变成明文有两个麻烦, 第一是不安全, 这个姑且不说, 其次就是不能享受django自带的一系列的加密解密的过程了

即使说在这时候你创建的密码会直接明文保存在数据库, 因此造成的问题就是  admin 是没法登陆使用的

解决方式

解决方式有很多目前了解的适用性最高的有两种

方式一

自行写相关方法实现加密解密的过程, 可以直接找别人写好的或者自己写都可以

方式二

注册使用 django 自带的  UserAdmin 这样就可以实现自带的功能了

django - 继承 AbstractUser 明文 问题处理

django - 继承 AbstractUser 明文 问题处理

django - 继承 AbstractUser 明文 问题处理

但是也存在问题, 这样单纯的通过继承实现, 在admin 操作的时候无法对我们扩展的字段进行展示

解决方式

from django.contrib.auth.admin import UserAdmin
from django.utils.translation import gettext, gettext_lazy as _


class MyAdmin(UserAdmin):
    # 重写fieldsets在admin后台加入自己新增的字段
    fieldsets = (
        (None, {‘fields‘: (‘username‘, ‘password‘)}),
        (_(‘personal info‘), {‘fields‘: (‘first_name‘, ‘last_name‘, ‘email‘)}),
        (_(‘permissions‘), {‘fields‘: (‘is_active‘, ‘is_staff‘, ‘is_superuser‘,
                                       ‘groups‘, ‘user_permissions‘)}),
        (_(‘important dates‘), {‘fields‘: (‘last_login‘, ‘date_joined‘)}),
        (_(‘nick_name‘), {‘fields‘: (‘nick_name‘,)}),
        (_(‘birday‘), {‘fields‘: (‘birday‘,)}),
        (_(‘gender‘), {‘fields‘: (‘gender‘,)}),
        (_(‘address‘), {‘fields‘: (‘address‘,)}),
        (_(‘mobile‘), {‘fields‘: (‘mobile‘,)}),
        (_(‘image‘), {‘fields‘: (‘image‘,)}),
        (_(‘home‘), {‘fields‘: (‘home‘,)}),
        (_(‘company_address‘), {‘fields‘: (‘company_address‘,)}),
        (_(‘company‘), {‘fields‘: (‘company‘,)}),
        (_(‘department‘), {‘fields‘: (‘department‘,)}),
        (_(‘credit_score‘), {‘fields‘: (‘credit_score‘,)}),
        (_(‘money‘), {‘fields‘: (‘money‘,)}),
        (_(‘is_driver‘), {‘fields‘: (‘is_driver‘,)}),
    )

admin.site.register(UserProfile, MyAdmin)

通过重写UserAdmin 的fieldsets 进行自定义的扩充既可

相关推荐

inspuryhq / 0评论 2020-07-28