zoukankan      html  css  js  c++  java
  • drf框架之小总结

    drf框架之小总结

    APIView的请求生命周期

    as_view():路由配置,禁用csrf

    dispatch():请求分发,请求解析、三大认证、异常处理、响应渲染

    request._request、request.query_params、request.data、request.META(请求头等诸多配置)

    序列化组件

    一、视图类中使用序列化

    serializer = UserModelSerializer(
    	instance="对象(们)",
        data = "数据(们)",
        many = False|True, #与数据或对象配套,代表操作的是否是多个、
        partial = False|True, #运用在局部修改中,所以校验可以选填(required=False)
        context = {'request':request} #视图、序列化传参
    )
    serializer.is_valid(raise_exception=False|True) #校验
    serializer.save() #入库
    serializer.data #序列化后的数据
    serializer.error #校验数据失败的信息
    
    

    二、Meta配置类中的配置

    model:关联的model类
    fields:所有序列化与反序列化字段
    extra_kwargs:简单的校验规则
    exclude:除某些字段
    depath:连表深度
    

    三、自定义校验规则

    validate_字段名:局部校验钩子
    validate:全局校验钩子
    

    四、入库方法

    create:增数据入库
    update:该数据入库
    后期这两个方法可能会被重写:涉及一些字段的加密解密处理、不仅仅是单表入库的操作
    	例:user = User.create()
        	UserDetail.create(user_id=user.id)
    

    五、自定义字段

    @property:在model类中自定义序列化字段
    自定义字段 = serializers.字段类型(write_only=True,其他规则):在serializer类中的自定义反序列化字段
    系统字段 = serializers.字段类型(规则):覆盖字段,可以设置为只读、只写、可读可写
    	外键字段的字段类型:PrimaryKeyRalatedField
    

    六、如果有群改操作

    自定义ListSerializer子类,重写update方法
    在相关ModelSerializer中用list_serializer_class配置进行关联
    
    

    序列化重(难)点

    i)在视图类中初始化序列化类对象时的参数选择(重点)

    ii)制定好所有序列化与反序列化字段(重点)

    iii)全局校验钩子的逻辑(难点)

    iiii)是否要重写入库方法(难点)

    视图家族

    两个基类:

    APIView、GenericAPIView
    	APIView:禁用csrf、解析、认证、渲染.....
        GenericAPIView:禁用csrf、解析、认证、渲染....+ 三个属性三个方法
        	三属性:querset、serializer_class、lookup_field
            三方法:get_queryset、get_serializer、get_obj
    

    工具类:

    mixin包下的五各类,使用GenericAPIView的三个属性三个方法(过渡)
    	三属性:querset、serializer_class、lookup_field
        三方法:get_queryset、get_serializer、get_obj
    

    工具视图类:

    mixin包下的类 + GenericAPIView 的组合形成的类
    	配置三个属性 + 是否需要重写get、post等方法
    

    视图集:

    ViewSetMixin重写as_view方法,可以自定义 请求方式 - 响应函数 的映射关系
    	配置三个属性 + mixin包下的类 + GenericViewSet
        ViewSet
    

    路由组件:SimpleRouter

    from django.conf.urls import url, include
    from . import views
    # 路由组件,必须配合视图集使用
    from rest_framework.routers import SimpleRouter
    router = SimpleRouter()
    
    # 以后就写视图集的注册即可:BookV3APIView和BookV4APIView都是视图集
    router.register('v3/books', views.BookV3APIView, 'book')
    router.register('v4/books', views.BookV4APIView, 'book')
    
    urlpatterns = [
        url('', include(router.urls))
    ]
    
    

    权限认证

    一、RBAC:Role-Based Access Control - 基于角色权限的认证规则

    ​ 权限六表:用户表、分组表、权限表+三大关系表

    在这里插入图片描述

    不同的用户属于不同分组拥有不同权限,用户操作用户表,用户表通过分组,分组表又关联权限表,然后用户就获得了权限,也可以直接用户表和权限建立关系,就获得了特殊权限。

    在这里插入图片描述
    二、auth六表是否需要重写或断关联(不需要)

    三、admin | xadmin | 自定义 提供的后台管理项目

    四、前台接口权限:三大认证

    在这里插入图片描述

    我把月亮戳到天上 天就是我的 我把脚踩入地里 地就是我的 我亲吻你 你就是我的
  • 相关阅读:
    线性代数(不完全)与矩阵合集
    最短路合集
    [SP2878]KNIGHTS
    Noip 提高组系列题解目录
    【code】最小费用最大流(Dinic / zkw) 模板
    题解 DTOJ #1002.调整(tweak)
    题解 DTOJ #1008.生成输入数据 (input)
    题解 DTOJ #3861.基里巴斯(path)
    模板 · ISAP网络流+GAP优化+弧优化
    代码 · DTOJ.飞行员配对方案
  • 原文地址:https://www.cnblogs.com/zhulipeng-1998/p/12863862.html
Copyright © 2011-2022 走看看