小生博客: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)
这时候后台就可以显示到我们扩展的字段了
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
本文题目:Django解决扩展用户表时,后台Admin显示密码为明文的问题-创新互联
网页路径:http://scgulin.cn/article/cseiep.html