python:django 框架一,二,三级视图函数示例
2019-03-14 15:18
405 查看
django 框架一,二,三级视图函数示例笔记
因常用到二级,三级视图函数,做个示例,视图集由于高度封装,有空的话另外再写一篇示例。
1,一级视图函数(APIView)
-
1、继承自View, apiView属于rest_framework中的类
-
2、扩展了,自己的request
APIView中的request对象:
获取数据GET: request.query_params
获取数据POST: request.data (不管是表单还是json) - 获取GET数据: request.GET
获取POST表单数据: request.POST
获取POST,json数据: request.body
3、扩展了,自己的response
-
a. 可以自动根据前端的Accept类型,返回不同的数据
4、 封装和添加了,认证,权限,用户管理等功能
5、API代码实现列表图(继承APIView)
from rest_framework.views import APIView get 获取所有的数据 from .serializers import XXXInfoModelSerializer class XXXAPIView(APIView): # 类名大概取的,下面的同样 def get(self,request): """获取所有的数据:""" # 1, 查询数据库 XXX = XXXInfo.objects.all() # XXXInfo为表的模型类名,下面的同样 # 2, 将数据转成字典 serializer = XXXInfoModelSerializer(instance=XXX,many=True) # 3, 返回响应 return Response(serializer.data) post 新增一个对象数据 def post(self,request): # 新增一本图书 # 1,获取数据 dic_data = request.data # 2,创建书籍 serializer = XXXInfoModelSerializer(data=dic_data) serializer.is_valid(raise_exception=True) # 3,数据入库 serializer.save() # 4,转成字典返回响应 return Response(serializer.validated_data,status=status.HTTP_201_CREATED) class XXXDetailAPIView(APIView): get 获取指定的一个数据 def get(self,request,pk): """获取一本图书""" # 1,根据pk参数,查询书籍 XXX = XXXInfo.objects.get(id=pk) # 2,对象转字典 serializer = XXXInfoModelSerializer(instance=book) # 3,返回响应 return Response(serializer.data) put 修改指定的数据 def put(self,request,pk): #修改一本图书 # 1,获取数据 dict_data = request.data # 2,根据pk,查询书籍 XXX = XXXInfo.objects.get(pk=pk) # 3,修改书籍(序列化器) serializer = BookInfoModelSerializer(instance=book,data=dict_data) serializer.is_valid(raise_exception=True) serializer.save() # 4,转成字典,返回响应 return Response(serializer.validated_data) delete 删除指定的数据 def delete(self,request,pk): #1,获取数据 book = XXXInfo.objects.get(pk=pk) #2,删除数据 XXX.delete() #3,返回响应 return Response(status=status.HTTP_204_NO_CONTENT)
2,二级视图函数(GenericAPIView)
- 作用:提供序列化器,查询集
GenericAPIView特点: 1, GenericAPIView继承了APIView类,为列表视图, 详情视图添加了常用的方法和属性。 属性: serializer_class: 给视图提供了通用的序列化器类 queryset: 表示查询的数据集(结果集),一般写成所有的结果集(给列表视图,详情视图使用) lookup_field: 默认的查询方式为pk, 如果不想要,可以重写 方法: get_queryset: 获取了,属性queryset的值 serializer_class: 获取序列化器类,就是上面的属性serializer_class get_serializer: 获取的是序列化器的,实例对象 get_object: 根据pk,获取了数据集中的单个对象 2, GenericAPIView与一个或多个mixin类组合而构建的 作用: 已经提供好了,对应的业务处理功能(list,create,retrieve,update,destroy方法) mixin名称 提供方法 作用 ListModelMixin list 获取所有数据 CreateModelMixin create 创建数据 RetrieveModelMixin retrieve 获取单个数据 UpdateModelMixin update 跟新数据 DestroyModelMixin destroy 删除单个数据
- GenericAPIView和MiXin配合使用,代码示例(继承GenericAPIView)
from rest_framework.generics import GenericAPIView (1),get 获取所有数据 class XXXInfoGenericAPIView(GenericAPIView): #1,给当前视图,提供了,通过的序列化器类 serializer_class = XXXInfoModelSerializer #2,给当前的视图,提供了,通用的数据集(结果集) queryset = XXXInfo.objects.all() def get(self,reqeust): """获取所有数据""" #1,查询所有结果, 以下三句话等价 # XXX = XXXInfo.objects.all() # XXX = self.queryset XXX = self.get_queryset() #2,定义序列化器,以下三句话等价 # serializer = XXXInfoModelSerializer(instance=XXX,many=True) # serializer = self.serializer_class(instance=XXX,many=True) serializer = self.get_serializer(instance=XXX,many=True) #3,返回 return Response(serializer.data) (2),get 获取指定单个数据 def get(self,request,pk): #1,获取单个数据 # XXX = XXXInfo.objects.get(pk=pk) XXX = self.get_object() #2,定义序列化器 serializer = self.get_serializer(instance=book) #3,返回 return Response(serializer.data) (3),put 修改指定的单个数据 def put(self,request,pk): #1,获取数据,书籍对象 dict_data = request.data book = self.get_object() #2,获取序列化器对象 serializer = self.get_serializer(instance=book,data=dict_data) #3,校验,入库 serializer.is_valid(raise_exception=True) serializer.save() #4,返回 return Response(serializer.validated_data) (4),delete 删除指定单个数据 def delete(self,request,pk): XXX = self.get_object() XXX.delete() return Response(status=status.HTTP_204_NO_CONTENT)
三、三级视图函数
作用: 封装get,post方法,继承GenericAPIView和mixin
三级视图: 1, 继承自了,GenericAPIView,和mixin 2, 不同的三级视图提供了不同的功能 三级视图名称 父类 提供方法 作用 ListAPIView GenericAPIView,ListModelMixin get 获取所有数据 CreateAPIView GenericAPIView,CreateModelMixin post 新建单个数据 RetrieveAPIView GenericAPIView,RetrieveModelMixin get 获取单个数据 UpdateAPIView GenericAPIView,UpdateModelMixin put 跟新数据 DestroyAPIView GenericAPIView,DestroyModelMixin delete 删除单个数据
- 代码示例
from rest_framework.mixins import ListModelMixin,CreateModelMixin class XXXInfoMiXinGenericAPIView(ListModelMixin,CreateModelMixin,GenericAPIView): serializer_class = XXXInfoModelSerializer queryset = BookInfo.objects.all() def get(self,request): """获取所有书籍""" return self.list(request) def post(self,request): """创建单本书籍""" return self.create(request) from rest_framework.mixins import RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin class XXXInfoDetailMiXinGenericAPIView(RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin,GenericAPIView): serializer_class = XXXInfoModelSerializer queryset = XXXInfo.objects.all() def get(self,request,pk): """获取单本书籍""" return self.retrieve(request) def put(self,request,pk): """跟新书籍""" return self.update(request) def delete(self,request,pk): """删除数据""" return self.destroy(request)
相关文章推荐
- 在Python的Django框架中包装视图函数
- 在Python的Django框架中包装视图函数
- 三十八、python学习之Django框架(一):入门,介绍,设计模式,环境搭建,项目创建,基本配置,创建视图,静态文件,路由与反解析,App应用配置
- Python Django框架实现应用添加logging日志操作示例
- 在Python的Django框架中使用通用视图的方法
- Django框架,Views(视图函数)
- Python的Django框架中的表单处理示例
- Django框架使用mysql视图操作示例
- Django 框架之视图函数(Views)
- 简化Python的Django框架代码的一些示例
- Python实现手写一个类似django的web框架示例
- Django视图(python函数)
- 支付宝即时到帐接口的python实现,示例采用django框架
- 支付宝即时到帐接口的python实现,示例采用django框架
- 用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
- 在Python的Django框架的视图中使用Session的方法
- 在Python的Django框架的视图中使用Session的方法
- 支付宝即时到帐接口的python实现,示例采用django框架
- python-Django学习心得-视图(函数视图和类视图)
- Python的Django框架中的表单处理示例