你好呀~

django restful风格简记

序列化器类的定义格式?
  继承serializers.Serializer;字段 = serializers.字段类型(选项参数)

序列化器类的基本使用?
  序列化器类(instance=None, data=empty, **kwarg);序列化时传给instance参数;反序列化时传给data参数。

序列化器类字段常用参数和选项参数?
  选项参数read_only,write_only,required。。。常用参数max_length,min_value。。。

序列化单个对象和多个对象?
  将obj传递给instance;添加参数many=True。

关联对象的嵌套序列化?
  1.PrimaryKeyRelatedField,将关联对象序列化为关联对象的主键,仅用于序列化需指定read_only=True,指定queryset参数时将被用作反序列化时参数校验。
  2.使用关联对象的序列化器,如在英雄序列化器类里定义hbook = BookInfoSerializer()。
  3.StringRelatedField,将关联对象序列化为关联对象模型类__str__方法的返回值。用法同1但没参数。

反序列化-基本校验和补充验证?
  基本校验:serializer.is_valid(),validated_data,errors。
  补充验证:1.字段添加validators选项参数,如validators=[函数],然后定义该函数进行校验。2.定义特定方法validate_字段名,针对特定字段验证。3.定义validate方法针对多个字段的内容进行补充验证。这个多好!!

反序列化-数据保存(新增和更新)
  创建序列化器对象的时候看有没有传递instance实例,有则save()方法调用update(),无则create()。

关于ModelSerializer?
  继承ModelSerializer;fields指定需序列化字段,可为__all__;自动生成序列化器类的字段;默认实现create()和update()。

视图类?
  2基5拓9子。

APIView视图基类的特点和基本使用?
  传入的为Request类的对象;响应为Response类的对象且会根据客户端请求头Accpet自动转换格式;自带异常处理机制;其他功能:认证、权限、限流。
  Request类的request属性有data,query_params。分别相当于body、POST、FILES等请求体数据和GET查询字符串。
  响应像强转,如Response(serializer.data)。

GenericAPIView视图基类的特点和基本使用?
  主要增加了操作序列化器和数据库查询的属性和方法。
  操作序列化器:
  serializer_class指明视图使用的序列化器。
  get_serializer_class(self)返回序列化器类。
  get_serializer(self, args, **kwargs)返回创建序列化器类的对象。
  数据库查询:
  queryset指明视图使用的查询集。
  get_queryset(self)返回视图使用的查询集。
  get_object(self)返回从视图使用的查询集中查询指定的对象。

Mixin扩展类?
  List(Create,Retrieve,Update,Destroy)ModelMixin;自动过滤和分页。

子类视图类?
  继承自GenericAPIView和对应的Mixin扩展类;在那5个基础上多这4个ListCreate(RetrieveUpdate,RetrieveDestroy,RetrieveUpdateDestroy)APIView。

视图集?
  将操作同一组资源相关的处理方法放在同一个类中,这个类叫做视图集。如:
  前面在实现图书管理的5个API时,需要两个类视图,而如果视图集,只需要一个即可。

 

视图集使用?
  继承视图集父类ViewSet。
  方法命名以对应的action命名,如def retrieve(self, request, pk):。
  url需指明对应关系。如大括号里写上'get': 'retrieve'。

 

视图集父类的使用?
  GenericViewSet:在视图继承里配合Mixin扩展类提供对应请求处理方法
  ModelViewSet:其本身继承自GenericViewSet和5个Mixin扩展类
  ReadOnlyModelViewSet:继承自GenericViewSet和2个Mixin扩展类

 

视图集中添加额外的处理方法?

  latest方法获取最新数据

  read方法修改指定图书的阅读量(只修改阅读量)

 

视图集对象action属性的作用?

  视图集对象.action获取所有执行action的操作.


路由Router的作用和基本使用?

from rest_framework.routers import SimpleRouter, DefaultRouter
router = SimpleRouter() 或 DefaultRouter()
router.register(prefix, viewset, base_name)
urlpatterns = []
urlpatterns += router.urls

  视图集中设置lookup_value_regex,以从url中提取pk参数对应的正则表达式。

  视图集中额外处理方法的配置项,即latest和read,需要添加action装饰器。action装饰器可以接收两个参数:methods:表明该处理方法对应的请求方式,列表传递。detail:表明生成url配置项时,是否需要从路径中提取pk数据。True/False:生成url配置项时,需要/不需要从url地址中提取pk参数。(没什么用破事还多^_^)

 

其他功能?

  认证:全局认证'DEFAULT_AUTHENTICATION_CLASSES':(rest_framework.authentication.SessionAuthentication);指定视图认证authentication_classes=[SessionAuthentication]

  权限:全局和指定用法同上。四种权限AllowAny, IsAuthenticated, IsAdminUser, IsAuthenticationOrReadOnly。

  自定义权限:继承BasePermission,方法has_permission(self, request, view), has_object_permission(self, request, view, obj)

  限流:分为限流类和频次。限流类AnonRateThrottle,UserRateThrottle和ScopedRateThrottle。频次属性有user,anon,若有指定视图限流则用指定的名字。

  指定视图限流:指定限流类为第三个,指定throttle_scope='',限流选项里用自己写的属性名。

  过滤:安装django-filter,注册DjangoFilterBackend,指定过滤字段filter_fields。

  排序:在视图中指定排序后端filter_backends=[OrderingFilter], 指定排序字段ordering_fields。浏览器url后面加上?ordering=排序的字段就可以访问了,如/?ordering=read。

  分页:配置文件中指定全局分页类DEFAULT_PAGINATION_CLASS和页容量PAGE_SIZE。全局分页类PageNumberPagination, LimitOffsetPagenation。某视图关闭分页pagination_class=none。

  自定义分页:pagination_class=自定义的类名,自定义的类里指定3个参数page_size,page_size_query_param, max_page_size。浏览器可以使用page和page_size访问。

  异常处理:默认异常处理exception_handler可处理APIException及DRF里的很多异常,返回给客户端对应的响应,区别django处理的是黄的一堆英文。自定义异常(相当于拓展了异常范围),如添加了DatabaseError。

 

 

posted @ 2020-02-08 19:02  测神  阅读(196)  评论(0编辑  收藏  举报