平台项目~ modelviewset封装类

一 简介 利用封装好的视图类进行日常操作
二 具体描述
  1 类名 ModelViewSet
  2 继承方法类  
   ListModelMixin -->提供一个list方法,对应get方法 实现了列出一个查询集;响应数据可以设置分页。
   CreateModelMixin -->提供 create(request, *args, **kwargs) 方法,对应post方法 实现创建和保存新模型实例 
   RetrieveModelMixin -->提供 retrieve(request, *args, **kwargs) 方法,对应get方法 实现单条数据的查询功能
   UpdateModelMixin -->提供 update(request, *args, **kwargs) 方法,对应put方法,实现更新和保存现有模型实例。
   DestroyModelMixin -->提供一个 destroy(request, *args, **kwargs) 方法,对应delete`实现现有模型实例的删除
三 具体使用
  django后端
  1 url设置
    url(r'^books/$', views.BookModelView.as_view({'get':'list','post':'create'})),
    url(r'^books/(?P<pk>\d+)/$', views.BookModelView.as_view({'get':'retrieve','put':'update','delete':'destroy'}))
 2 调用
   from rest_framework import viewsets
   class PersonalSet(ModelViewSet):
   queryset = models.objects.all()
   serializer_class = PersonalSerialize
   VUE 前端
   post /books/ 传递参数
   get /books/
   put /books/pk/ 传递参数
   delete /books/pk/
    retrieve /bokks/pk/
四 整体调用过程
  1 前端发送http请求
  2 modelviewset针对不同请求寻找http对应方法函数
    post->create函数
    get->list函数
    put-> 1 update函数(全字段更新,必须要有unique_key,否则会报错)
              2 partial_update(部分字段更新,不必须有unique_key,推荐使用) 
   delete->destroy函数
  3 针对传递参数进行有效性判断
    1 serializer.valid() 根据的是序列化内部定义的规则
       1 返回值True/False,只有通过才能执行下一步操作
       2 可以通过serializer.errors 查看错误
  4 最后调用serializer.save() 内部指向serializers.py内部方法
    put请求->update方法 
    post请求->create方法
    这两种方法都可以进行重写
五 调试

  1 当遇到问题时,要进行调试,可以将源码粘贴到类下,添加代码进行DEBUG,比如update方法
  2 models-choice选项不推荐使用,会有点麻烦.建议大家还是在前端进行vue选择即可,本人因为这个问题卡了很久,导致更新不能实现功能
  3 此封装类只支持利用PK进行删除,切记,如果想根据别的字段,需要修改类定义
  4 用此封装类可以实现大多数场景的增删查改,非常方便,推荐大家使用


 

猜你喜欢

转载自www.cnblogs.com/danhuangpai/p/11242590.html