django admin后台管理添加用户时密码是明文保存的问题

问题与需求:在使用admin后台新增用户设置密码时,默认情况下密码是明文保存在数据库中,并没有加密,无法登录。代码和示例如下:

1,模型models.py

定义用户表UserProfile:

from django.db import models
from django.contrib.auth.models import AbstractUser


class UserProfile(AbstractUser):
    nikename = models.CharField(max_length=20, verbose_name="昵称", null=True, blank=True)
    mobile = models.CharField(max_length=11, verbose_name="手机号码", null=True, blank=True)
    schoolName = models.CharField(max_length=30, verbose_name="学校名称", null=True, blank=True)
    openid = models.CharField(max_length=100, verbose_name="用户的openid",blank=True, default="")

    def __str__(self):
        return self.username

    class Meta:
        verbose_name = "用户信息"
        verbose_name_plural = verbose_name
2,admin.py
from django.contrib import admin

from .models import UserProfile


class UserProfileAdmin(admin.ModelAdmin):
    list_display = ('username', 'openid')
    list_display_links = ("username", "openid",)
    search_fields = ("username", "openid")
    list_filter = ("is_staff",)
    readonly_fields = ("openid",)
    list_per_page = 10

admin.site.register(UserProfile, UserProfileAdmin)  # 用户

3,密码明文显示的问题

admin后台密码明文显示

mysql数据库的password也是没有加密的

4,解决密码明文显示

所以需要修改代码,继承UserAdmin

from django.contrib.auth.admin import UserAdmin

from .models import UserProfile

# UserAdmin继承自ModelAdmin
class UserProfileAdmin(UserAdmin):
    list_display = ('username', 'openid')
    list_display_links = ("username", "openid",)
    search_fields = ("username", "openid")
    list_filter = ("is_staff",)
    readonly_fields = ("openid",)
    list_per_page = 10

admin.site.register(UserProfile, UserProfileAdmin)  # 用户

再看效果

新增页面:

新增完成之后查看页面:

5,注意事项

如果你实际上手操作或仔细一点的话你会发现一个问题:在继承UserAdmin后,无论是新增页面还是新增完成之后的查看页面,都会少了自己定义的模型字段,比如我这里少了UserProfile模型定义的openid,schoolName等等

这时需要添加fieldsets

from django.contrib.auth.admin import UserAdmin

from .models import UserProfile


class UserProfileAdmin(UserAdmin):
    list_display = ('username', 'openid')
    list_display_links = ("username", "openid",)
    search_fields = ("username", "openid")
    list_filter = ("is_staff",)
    list_per_page = 10
    fieldsets = (
        (None, {'fields': ('username', 'password', 'first_name', 'last_name', 'email')}),

        (gettext_lazy('个人信息'), {'fields': ('openid',)}), # 添加模型里的字段openid

        (gettext_lazy('Permissions'), {'fields': ('is_superuser', 'is_staff', 'is_active',
                                                  'groups', 'user_permissions')}),

        (gettext_lazy('Important dates'), {'fields': ('last_login', 'date_joined')}),
    )

admin.site.register(UserProfile, UserProfileAdmin)  # 用户

新增页面:

在设置完用户名和密码后的继续编辑页面:

查看页面:

到这里就已经解决了admin后台新增用户时的密码明文设置,和部分字段显示的问题了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值