一 简介 利用封装好的视图类进行日常操作
二 具体描述
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 用此封装类可以实现大多数场景的增删查改,非常方便,推荐大家使用