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

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

models.py

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

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)  # 用户

admin后台密码明文显示

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

所以需要修改代码,继承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)  # 用户

再看效果

新增页面:

新增完成之后查看页面:

如果你实际上手操作或仔细一点的话你会发现一个问题:在继承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后台新增用户时的密码明文设置,和部分字段显示的问题了

猜你喜欢

转载自blog.csdn.net/qq_37140721/article/details/129619303
今日推荐