Django框架之admin管理后台

Posted xuchengnotes

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django框架之admin管理后台相关的知识,希望对你有一定的参考价值。

一、扩展auth_user表的字段

我们知道auth_user表是在执行数据库迁移命令时自动创建的

django中间件帮我们在请求来的时候通过auth_user表进行用户身份校验

那问题来了,我们如何改auth_user表呢?增加或删除字段?

1.1 通过AbstractUser类来进行扩展

  1. 首先导入auth认证组件中的AbstractUser类
    from django.contrib.auth.models import AbstractUser

  2. 自己写一个类 继承原来的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)
  1. 在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管理后台的主要内容,如果未能解决你的问题,请参考以下文章

django之admin后台管理

django基础知识之后台管理Admin站点:

django 之admin后台管理

django 框架学习:十六.django 后台管理系统

Django框架 之 admin管理工具(组件使用)

Python菜鸟之路:Django Admin后台管理功能使用