管理表页面的创建

管理表页面的创建

drf 三大认证:

共有 认证组件、权限组件、频率组件 三大认证组件:

    只有认证通过才能访问到指定的url地址,比如增删改查的操作

django的auth模块有六张表:

    用户表,分组表,权限表,用户分组表,分组权限表,用户权限表

1. 认证组件

  • 就是身份认证,校验用户:游客、合法用户、非法用户

    •   1. 游客:代表校验通过,直接进入下一步校验(权限校验)
      
        2. 合法用户:代表校验通过,将用户存储在request.user中,再进入下一步校验(权限校验)
      
        3. 非法用户:代表校验失败,抛出异常,返回403权限异常结果
      
        4. 只要通过认证不管是游客还是登录用户,request.user都有值

2. 权限组件

  • 校验用户权限:必须是已登录的

    •   1. 针对所有用户——》校验用户的读写权限 。如:游客只读,正规用户可读可写
      
        2. 认证通过:可以进入下一步校验(频率认证)
      
        3. 认证失败:抛出异常,返回403权限异常结果

3. 频率组件

  • 限制视图接口在一定的时间内被访问的频率次数

    1. 限制的条件(IP、id、唯一键)、频率周期时间(s、m、h)、频率的次数(3/s)

    1. 没有达到限次:正常访问接口
    2. 达到限次:限制时间内不能访问,限制时间达到后,可以重新访问

定置管理页面:

# admin.py--->管理员管理页面

from django.contrib import admin

from . import models

from django.contrib.auth.admin import UserAdmin as AuthUserAdmin
class UserAdmin(AuthUserAdmin):
    # 添加用户页面可控制字段
    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('username', 'password1', 'password2', 'is_staff', 'mobile'),
        }),
    )
    # 用户列表展示页面显示字段
    list_display = ('username', 'email', 'mobile', 'is_staff')

# 注册自定义User表,用admin管理,配置UserAdmin,定制化管理页面
admin.site.register(models.User, UserAdmin)

用户权限关系:

#models.py
from django.contrib.auth.models import User
# 自定义User表
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
    mobile = models.CharField(max_length=11, verbose_name='电话号码', unique=True)

    class Meta:
        db_table = 'old_boy_user'
        verbose_name_plural = '用户表'

    def __str__(self):
        return self.username
    
#settings.oy 
# 自定义User表配置
AUTH_USER_MODEL = 'api.User'

表:User、Group、Permission、UG关系表、UP关系表、GP关系表

传统的RBAC有两种:权限三表:
                    User、Group、Permission
               权限五表:
                    没有UP关系表
Django中Auth组件采用的是 权限六表(在传统RBAC基础上增加UP关系表)

基于Auth的权限管理认证模块(ThinkPHP)(了解)

注意: 用户管理表,一定要在第一次数据库迁移时完成

自定义routers 模块:

from rest_framework.routers import Route, DynamicRoute, SimpleRouter as DRFSimpleRouter

class SimpleRouter(DRFSimpleRouter):
    routes = [
        # List route.  /资源s/
        Route(
            url=r'^{prefix}{trailing_slash}$',
            mapping={
                'get': 'list',  # 群查
                'post': 'create',  # 单增、群增
                'put': 'multiple_update',  # 群整改
                'patch': 'multiple_partial_update',  # 群局改
                'delete': 'multiple_destroy',  # 群删
            },
            name='{basename}-list',
            detail=False,
            initkwargs={'suffix': 'List'}
        ),
        # Dynamically generated list routes. Generated using
        # @action(detail=False) decorator on methods of the viewset.
        DynamicRoute(
            url=r'^{prefix}/{url_path}{trailing_slash}$',
            name='{basename}-{url_name}',
            detail=False,
            initkwargs={}
        ),
        # Detail route.  /资源s/(pk)/
        Route(
            url=r'^{prefix}/{lookup}{trailing_slash}$',
            mapping={
                'get': 'retrieve',  # 单查
                'put': 'update',  # 单整改
                'patch': 'partial_update',  # 单局改
                'delete': 'destroy'  # 单删
            },
            name='{basename}-detail',
            detail=True,
            initkwargs={'suffix': 'Instance'}
        ),
        # Dynamically generated detail routes. Generated using
        # @action(detail=True) decorator on methods of the viewset.
        DynamicRoute(
            url=r'^{prefix}/{lookup}/{url_path}{trailing_slash}$',
            name='{basename}-{url_name}',
            detail=True,
            initkwargs={}
        ),
    ]

# 对外提供router对象
router = SimpleRouter()
# eg: router.register('users', UserModelViewSet, basename='user')

猜你喜欢

转载自www.cnblogs.com/shaozheng/p/12127520.html