码迷,mamicode.com
首页 > 其他好文 > 详细

74.Restframework中的Request

时间:2018-08-03 00:52:33      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:href   turn   rgs   rest   详细   meta   art   扩展   port   

1.介绍

  该篇博客主要介绍restframework内置的Request类,它扩展了Django中的Request类,实现了很多方便的功能--如请求数据解析和认证等。

  如: 在APIView中封装的request,就实现了请求数据的解析:对于GET请求的参数我们通过request.query_params来获取。对于POST请求、PUT请求的数据我们通过request.data来获取。

1.1 基于APIView的请求

  在上一篇中,我们获取请求的方式:

urls.py

url(r‘comment/‘,views.CommentView.as_view()),
url(r‘comment/(?P<pk>\d+)/$‘,views.CommentDetail.as_view()), 

views.py

from app01 import models
from app01 import app01_serializers    # 导入验证表
from rest_framework.views import APIView  
# 你打开源码,在rest_framework文件夹下还有一个一个views文件,里面有APIView类,它继承了view
from rest_framework.response import Response

class Comment(APIView):
    def get(self, request, *args, **kwargs):
        query_set = models.School.objects.all()
        ser_obj = app01_serializers.CommentSerializer(query_set, many=True)
        return Response(ser_obj.data)


class CommentDetail(APIView):
    def get(self, request, pk, *args, **kwargs):
        obj = models.School.objects.filter(pk=pk).first()
        ser_obj = app01_serializers.CommentSerializer(obj)
        return Response(ser_obj.data) 

 app01_serializers.py(在我们应用下创建的文件)

from app01.models import Comment
from rest_framework import serializers

class CommentSerializer(serializers.ModelSerializer):

	class Meta:
		model = Comment
		fields = "__all__"
		depth = 1

1.2  基于GenericAPIView的请求 

  GenericAPIView对APIView再次封装,实现了强大功能。通常使用时,可搭配一个或多个Mixin扩展类:

1.ListModelMixin      # 提供list方法快速实现列表视图(多条数据)

2.CreateModelMixin    # 提供create方法快速实现创建资源的视图

3.RetrieveModelMixin   # 提供retrieve方法,可以快速实现返回一个存在的数据对象(需要传入pk)

4.UpdateModelMixin     # 提供update方法,可以快速实现更新一个存在的数据对象。 提供partial_update方法,可以实现局部更新

5.DestroyModelMixin   # 提供destroy方法,可以快速实现删除一个存在的数据对象

  这五个类分别实现了增删改查的功能,其中ListModelMixin实现的request方法无需传入id值,就可以查找全部数据,而RetrieveModelMixin需要传入id才能实现查找,而且是针对性的

GenericAPIView属性:

支持定义的属性:

列表视图与详情视图通用:
	queryset 				# 列表视图的查询集
	serializer_class 		# 视图使用的序列化器

列表视图使用:
	pagination_class 		# 分页控制类
	filter_backends 		# 过滤控制后端

详情页视图使用:
	lookup_field 			# 查询单一数据库对象时使用的条件字段,默认为‘pk‘
	lookup_url_kwarg 		# 查询单一数据时URL中的参数关键字名称,默认与look_field相同

 详细介绍猛戳这里

urls.py

url(r‘comment/(?P<pk>\d+)/$‘,views.CommentDetail.as_view()),
url(r‘comment/‘,views.CommentView.as_view()),

app01_serializers.py(在我们应用下创建的文件)

from app01.models import Comment
from rest_framework import serializers

class CommentSerializer(serializers.ModelSerializer):

	class Meta:
		model = Comment
		fields = "__all__"
		depth = 1

views.py(这是针对get请求操作)

from rest_framework.mixins import ListModelMixin,RetrieveModelMixin
from rest_framework.generics import GenericAPIView

class CommentView(GenericAPIView,ListModelMixin):
    queryset = models.Comment.objects.all()
    # 必须叫这个名字
    serializer_class = app01_serializers.CommentSerializer
    def get(self,request,*args,**kwargs):
        return self.list(request,*args,**kwargs)


class CommentDetail(GenericAPIView,RetrieveModelMixin):
    queryset = models.Comment.objects.all()
    serializer_class = app01_serializers.CommentSerializer

    def get(self,request, pk,*args,**kwargs):
        return self.retrieve(request, pk, *args, **kwargs)

  

 

 

 

 

  

 

74.Restframework中的Request

标签:href   turn   rgs   rest   详细   meta   art   扩展   port   

原文地址:https://www.cnblogs.com/LearningOnline/p/9410677.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!