Django框架之admin管理后台
Posted xuchengnotes
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django框架之admin管理后台相关的知识,希望对你有一定的参考价值。
一、扩展auth_user表的字段
我们知道auth_user表是在执行数据库迁移命令时自动创建的。
django中间件帮我们在请求来的时候通过auth_user表进行用户身份校验
那问题来了,我们如何改auth_user表呢?增加或删除字段?
1.1 通过AbstractUser类来进行扩展
首先导入auth认证组件中的AbstractUser类
from django.contrib.auth.models import AbstractUser
自己写一个类 继承原来的auth_user类
注意:你继承了AbstractUser之后 你自定义的表中 字段不能跟原有的冲突
'''扩展 auth认证组件中 auth_user表'''
from django.contrib.auth.models import AbstractUser
class My_User(AbstractUser):
"""
强调 你继承了AbstractUser之后 你自定义的表中 字段不能跟原有的冲突
"""
phone = models.BigIntegerField()
avatar = models.FileField()
register_time = models.DateField(auto_now_add=True)
在settings配置文件中 告诉django使用你新建的类来替代auth_user表
固定语法: AUTH_USER_MODEL = ‘应用名.表名‘
坑点:不能在以有库上直接在迁移一次数据库。只能用新的数据库,并且没有数据库迁移记录。
'''settings.py'''
# auth自定义表配置
AUTH_USER_MODEL = 'app01.My_User'
# 固定语法: AUTH_USER_MODEL = '应用名.表名
通过上面的方式 继承的表 还可以继续使用auth模块所有的功能
再次注意:
一旦我们指定了新的认证系统所使用的表,我们就需要重新在数据库中创建该表,而不能继续使用原来默认的auth_user表了。
1.2 对模型表进行配置
# 继承系统的user表
class UserInfo(AbstractUser):
mobile = models.CharField(max_length=11, unique=True)
class Meta:
# 更改数据库的表名
db_table = 'user'
# 更改后台显示的表名
verbose_name_plural = '系统用户表'
def __str__(self):
return self.username
1.3 通过Admin.py将表注册到后台管理页面
'''admin.py'''
from django.contrib import admin
# Register your models here.
from app01 import models
# 注册models中的八张表
admin.site.register(models.UserInfo)
admin.site.register(models.Blog)
admin.site.register(models.Article)
admin.site.register(models.Tag)
admin.site.register(models.Category)
admin.site.register(models.Article_Tag)
admin.site.register(models.Comment)
admin.site.register(models.UpAndDown)
# admin注册自定义User表:密文操作密码
from django.contrib.auth.admin import UserAdmin
class UserInfo(UserAdmin):
add_fieldsets = (
(None, {
'classes': ('wide',),
# 添加用户界面可操作的字段
'fields': ('username', 'password1', 'password2', 'mobile', 'email', 'is_staff', 'is_active'),
}),
)
list_display = ('username', 'mobile', 'email', 'is_staff', 'is_active')
# 明文操作密码,admin可视化添加的用户密码都是明文,登录时用的是密文,所以用户无法登录
# admin.site.register(models.User)
admin.site.register(models.UserInfo, UserInfo)
以上是关于Django框架之admin管理后台的主要内容,如果未能解决你的问题,请参考以下文章