DRF学习笔记(2)(DRF实验)

网友投稿 451 2022-08-23


DRF学习笔记(2)(DRF实验)

目录​

​​django的View|局部禁用csrf 1​​​

​​python中实现抽象类 3​​​

​​django校验 5​​​

​​序列化多条many=True源码 6​​​

​​serializers.ModelSerializer 7​​​

​​serializer高级用法 8​​​

​​23种设计模式 10​​​

​​视图中queryset简写 10​​​

​​视图总结 10​​​

​​路由总结|action的使用 13​​​

​​认证|权限|频率|过滤|排序 15​​​

​​自定义封装Response 19​​​

​​自定义全局异常处理 20​​​

​​django模型 20​​​

​​时间字段 21​​​

​​抽象表 21​​​

​​外键相关 22​​​

​​多对多 23​​​

​​models.ImageField 23​​​

​​分页 24​​​

​​频率 24​​​

​​自动生成接口文档 25​​​

​​JWT 27​​​

​​base64 29​​​

​​RBAC 29​​​

​​django缓存 30​​​

rest_framework.settings中有默认配置;​

django模型中不能有2个自增字段;​

django的View|局部禁用csrf​

django的View,as_view(),dispatch()重要;​

drf的APIView(View),as_view(),dispatch(),dispatch()里的self.initial()做了3件事(认证组件|权限组件|限流组件);​

仅支持get请求;​

python中实现抽象类​

注:这样写用于规范子类的行为(框架中规范),如果没有此规范要人为约定(容易出错),父类中的方法用@abc.abstractmethod包装后,在子类中必须重写此方法,否则报NotImplementedError未实现错误,java要这样写,py中可不用;​

注:也是规定子类行为,不用@abc.abstractmethod;​

两种方式均可;​

django校验​

注:序列化类中校验,局部|全局|函数,3种方式;​

序列化多条many=True源码​

serializers.ModelSerializer​

serializer高级用法​

serializer的read_onoy和write_only​

instance和validated_data的数据是对应的;​

23种设计模式​

视图中queryset简写​

queryset = Book.objects # 或Book.objects.all()都可​

视图总结​

GenericAPIView,使用queryset|serializer_class就可快速提供5个接口(单个增,单个删,单个获取,单个更新,获取全部);​

GenericAPIView和5个视图扩展类(ListModelMixin|CreateModelMixin|UpdateModelMixin|DestroyModelMixin|RetrieveModelMixin)写接口;​

path('book/', views.BookView.as_view()),​

re_path('book/(?\d+), views.BookDetailView.as_view())​

rest_framework.generics下​

ListAPIView|CreateAPIView|UpdateAPIView|RetrieveAPIView|DestroyAPIView;​

ListCreateAPIView|RetrieveUpdateAPIView|RetrieveUpdateDestroyAPIView;​

最后rest_framework.viewsets import ModelViewSet​

神奇的是ViewSetMixin(源码分析),重写了as_view();​

视图3行,路由2行实现5个接口;​

路由总结|action的使用​

认证|权限|频率|过滤|排序​

认证类|权限类|限流类均继承APIException,所以可以只捕获APIException;​

自定义封装Response​

自定义全局异常处理​

异常处理,用于统一接口返回;​

django模型​

on_delete=models.CASCADE # 危险,要想清楚哪些用级联删除哪些不能​

models.DO_NOTHING​

models.PROTECT​

时间字段​

auto_now_add=True # 只要记录创建,不需要手动插入时间,自动把当前时间插入​

auto_now=True # 只要更新,就会把当前时间插入​

default=datetime.datetime.now # 注意不能加括号,加了括号就是项目开始执行的时间(所有记录时间都一样)​

抽象表​

同django.contrib.auth.models import AbstractUser,不创建表;​

外键相关​

publish=models.ForeignKey(to=Publish) # to_field默认不写,会关联到Publish主键上​

db_cnotallow=False # 逻辑上的关联(代码控制),实际上数据层面没有此关联,增删不受外键影响(orm查询不影响)​

authordetail=OneToOneField(to=AuthorDetail,db_cnotallow=False,on_delete=models.CASCADE) # 一对一关系,写在查询频率高的一边;本质就是FK+unique​

多对多​

多对多关系写在查询次数多的一边;​

第三张表只有关联字段,用自动;第三张表有扩展字段,只能手动;​

models.ImageField​

ImageField中的upload_to='icon'的路径是在MEDIA_ROOT定义下的icon/;​

只要使用自定义的用户表,一定要定义AUTH_USER_MODEL;​

分页​

频率​

自动生成接口文档​

注:继承APIView的也可加在方法下面;​

另swagger;​

​​access control​

django中,后台的权限控制:6张表;​

前台(主站),用三大认证,认证|权限|控制;​

django缓存​


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:在座的Python爬虫工程师,你敢爬律师事务所站点吗?(爬虫 律师)
下一篇:kafka手动调整分区副本数的操作步骤
相关文章

 发表评论

暂时没有评论,来抢沙发吧~