zoukankan      html  css  js  c++  java
  • 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)
    
  • 相关阅读:
    自定义CollectionView实现流式布局和动态图片的展现
    Java设计模式之观察者模式
    HashMap工作原理
    SpringBoot 实现多线程
    十大排序算法
    IDEA集成 plant uml 画图工具
    解决国内访问github速度慢的问题
    SpringBoot整合JWT Token
    SpringBoot在idea中配置热部署
    Spring-Security教程【一】简单的登录认证
  • 原文地址:https://www.cnblogs.com/XuChengNotes/p/11938797.html
Copyright © 2011-2022 走看看