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 | 自定义 提供的后台管理项目

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

在这里插入图片描述

posted @ 2020-02-24 19:26  Mr-Allen  阅读(118)  评论(0编辑  收藏  举报