Django解决扩展用户表时,后台Admin显示密码为明文的问题

小生博客:http://xsboke.blog.51cto.com

如果有疑问,请点击此处,然后发表评论交流,作者会及时回复(也可以直接在当前文章评论)。

                        -------谢谢您的参考,如有疑问,欢迎交流


Django解决当扩展用户表时,用户继承AbstractUser后,后台Admin会显示密码为明文的问题

先看项目列表

1、今天在写一个扩展Django默认的用户表功能时,遇到了一个问题.
先给大家看一下我写的,扩展用户表的models[apps.users.models],我是通过继承AbstractUser进行扩展的(还有一种方式是引入User表,通过外键的形式进行扩展).

注意:
请在setting配置文件中,添加如下配置,从而修改用户表为自定义model(我app的名字为users).
       AUTH_USER_MODEL = ‘users.UserProfile‘
from django.db import models

from django.contrib.auth.models import AbstractUser

# Create your models here.

class UserProfile(AbstractUser):
    user = models.CharField(max_length=30, null=True, blank=True, verbose_name="用户")
    birthday = models.DateField(null=True, blank=True, verbose_name="出生年月")
    gender = models.CharField(max_length=8, choices=(("male", u"男"), ("female", "女"),("unknown", u"未知")), default="unknown",verbose_name="性别")
    mobile = models.CharField(max_length=11,null=True, blank=True,  verbose_name="电话")

    class Meta:
        verbose_name = ‘用户‘
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.username

2、这时候你Admin后台就没有之前那张用户表了,就变成下面那个样子了

然后你就需要在你的users app中配置admin[apps.users.admin],就像为其他表配置admin一样,我做了如下配置

from django.contrib import admin
from django.utils.translation import gettext_lazy

from apps.users.models import UserProfile
# Register your models here.

class UserProfileAdmin(admin.ModelAdmin):
    list_display = (‘username‘,‘last_login‘,‘is_superuser‘,‘is_staff‘,‘is_active‘,‘date_joined‘)
    fieldsets = (
        (None,{‘fields‘:(‘username‘,‘password‘,‘first_name‘,‘last_name‘,‘email‘)}),

        (gettext_lazy(‘User Information‘),{‘fields‘:(‘user‘,‘birthday‘,‘gender‘,‘mobile‘)}),

        (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)

3、然后在后台admin中就可以看到这张表了

但是当你新建用户或者打开用户表后发现,密码竟然是明文的,我试过啦,直接写密码是不可以的,如下图

4、那么密码字段应该是什么样的呢,我给大家放出还未扩展用户表时,django默认的用户表的图片

现在我们也需要实现这种效果怎么办,我在查阅资料之后,网上有个用户提供了这么个方法

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin

from apps.users.models import UserProfile
# Register your models here.

admin.site.register(UserProfile, UserAdmin)

5、我尝试了一下,这样可以,但是有个问题,我自定义的字段没有在后台显示,如下图:

然后我看了一下UserAdmin的源码(在pychram中按住Ctrl键,然后用鼠标左键点击UserAdmin,就可以看到源码)
我们可以这样解决,如下,通过继承UserAdmin,然后覆盖你想要修改的字段。

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.utils.translation import gettext_lazy

from apps.users.models import UserProfile
# Register your models here.

class UserProfileAdmin(UserAdmin):
    list_display = (‘username‘,‘last_login‘,‘is_superuser‘,‘is_staff‘,‘is_active‘,‘date_joined‘)
    fieldsets = (
        (None,{‘fields‘:(‘username‘,‘password‘,‘first_name‘,‘last_name‘,‘email‘)}),

        (gettext_lazy(‘User Information‘),{‘fields‘:(‘user‘,‘birthday‘,‘gender‘,‘mobile‘)}),

        (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)

这时候后台就可以显示到我们扩展的字段了

原文地址:https://blog.51cto.com/xsboke/2362570

时间: 2024-09-29 04:38:46

Django解决扩展用户表时,后台Admin显示密码为明文的问题的相关文章

Django:创建用户模型报错: (admin.E108) The value of 'list_display[4]'解决方案

参考资料:虫师-<web接口开发与自动化测试:基于python语言> 日常学习Django框架中,创建了用户模型,但是页面功能验证时候,提示不能进行列表字段操作,debug好久,才找到问题原因,心累... 下面是大概过程和解决方案... models.py文件代码: 1 from django.db import models 2 3 # Create your models here. 4 # 发布会表 5 class Event(models.Model): 6 name = models

django之重构用户表

一.django自定义用户表格式(3.0.0) 数据库: Model类: class AbstractUser(AbstractBaseUser, PermissionsMixin): """ An abstract base class implementing a fully featured User model with admin-compliant permissions. Username and password are required. Other fie

解决MySQL联表时出现字符集不一样

mysql 建表时都会设置表的字符集和排序规则,通常是 utf8,不过我这边习惯建表的字符集是 utf8mb4,排序规则是 utf8mb4_unicode_ci.有些 utf8mb4 的表默认排序规则是 utf8mb4_general_ci,导致在联表操作时会报错误: Illegal mix of collations 其实这个就是联表时由于表的排序规则不一致才会引起的,这个可以通过将表的排序规则改成一致来解决. 但是有时表已经在线上了,无法修改,而现在又要急着用,可以通过下面的方法: UPDA

django继承修改 User表导致的问题

扩展默认的auth_user表参考: http://www.cnblogs.com/liwenzhou/p/9030211.html#undefined django继承修改 User表时,python  manage.py  makemigrations进行python  manage.py  migrate操作时会导致的问题如图: 根源:django文档中有注明: Due to limitations of Django’s dynamic dependency feature for sw

Tomcat8.0.21登录时忘记用户名和密码

大概是这学期开学没多久吧,4月份的时候,为了学习javaEE,装了Tomcat.过了这么久早就忘记用户名和密码了,所以无法进入Tomcat的管理界面.百度(其实我也很想用google)了一堆,几乎都是修改用户配置文件,可能是版本的差异,对于我这个版本都没有太大用处.其实只要按照tomcat的提示一步步去做就可以解决,前提是英语基础要好,其实技术文章比文学作品和四级考试好懂多了,语言很直白,从来不拐弯抹角. 下面是解决这个问题的步骤:  一.找到Tomcat配置文件的位置,修改tomcat-use

Django笔记 如何扩展User表的字段

django 自带的权限框架,其中auth_user表的字段,很难满足正常的需求,因此需要扩展,至于扩展,一般有如下几种选择: 1. 直接修改django 源码,修改User class 的定义,以及各种方法等,然后把数据库auth_user表里的字段扩展到与自己需求一致.(源代码在:django.contrib.auth.models import User),这种方式,每次升级django都得很小心. 2. 把django 的user以及认证部分的源代码拷贝到自己的app下面,然后修改,配置

django 利用钉钉 扩展用户系统

django 利用钉钉 扩展用户系统 用户架构图 说明 以django 自带 user,group 为基础 ,结合 钉钉用户系统 进行结合,以达到能够满足实际需求. 组关系: 钉钉部门组 通过 多对多 关系到 系统Group. 然后设置计划任务,如果 有钉钉部门组 关联到了 系统组,就把该用户组下的 用户 自动添加相应的 系统组. 组关系2: 自定义权限组 通过 多对多 关系到 系统Group. 根据 用户 系统组 的名字 查询到 自定义权限信息,进行判断 版本 Django==2.0.9 js

c#操作excel导入导出时同时向用户表插入账户与密码

<><><><>本代码源于师兄<><><><><><> 1:首先需要在前端显示界面View视图中添加导入Excel和导出Excel按钮: @using (Html.BeginForm()) { } 这里注意,导出Excel是通过获取当下的表单的方式来导出数据的. 2:然后为导入Excel添加导入方法function: js部分以图片存放 3:添加点击事件后弹出来的操作界面(importe

Django自定义用户表替换默认用户表认证

1.自定义用户表 from django.db import models from django.contrib.auth.models import AbstractUser # Create your models here. class UserProfile(AbstractUser):   ##引用Django内置的AbstractUser表,并添加下列字段     nick_name = models.CharField(max_length=50,default="",