一、warp view的两种方式

(1) FBV:function based view

(2) CBV:class based view

二、FBV方式简要介绍

from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
from snippets.models import Snippet
from snippets.serializers import SnippetSerializer@api_view(['GET', 'POST'])                                                #特点一:@api_view 修饰,如果学过JAVA应该会很熟悉,JAVA中的注释法 @controller这样的类型
def snippet_list(request): #接受的是request对象"""List all code snippets, or create a new snippet."""if request.method == 'GET':                                           #特点二: 实现注释中的所有方式snippets = Snippet.objects.all()serializer = SnippetSerializer(snippets, many=True)return Response(serializer.data)elif request.method == 'POST':serializer = SnippetSerializer(data=request.data)if serializer.is_valid():serializer.save()return Response(serializer.data, status=status.HTTP_201_CREATED)return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)URL定位描述方式:
from django.urls import path
from rest_framework.urlpatterns import format_suffix_patterns
from snippets import views
urlpatterns = [path('snippets/', views.snippet_list),path('snippets/<int:pk>', views.snippet_detail),
]
urlpatterns = format_suffix_patterns(urlpatterns)             # 使资源没有后缀限制,maybe

三、CBV 方式简要介绍

from snippets.models import Snippet
from snippets.serializers import SnippetSerializer
from django.http import Http404
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import statusclass SnippetList(APIView): #APIView ,its important                           # 特点一、class 包装 view"""List all snippets, or create a new snippet."""def get(self, request, format=None):                                      # 特点二、get ,post,put等方式通过def 实现snippets = Snippet.objects.all()serializer = SnippetSerializer(snippets, many=True)return Response(serializer.data)def post(self, request, format=None):serializer = SnippetSerializer(data=request.data)if serializer.is_valid():serializer.save()return Response(serializer.data, status=status.HTTP_201_CREATED)return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)URL定位描述方式:
from django.urls import path
from rest_framework.urlpatterns import format_suffix_patterns
from snippets import viewsurlpatterns = [path('snippets/', views.SnippetList.as_view()),                # as_viewpath('snippets/<int:pk>/', views.SnippetDetail.as_view()),
]urlpatterns = format_suffix_patterns(urlpatterns)

四、CBV 深入了解

4.1 APIView 与 View的不同

(1) request 不同: APIView使Request的实例, View是HttpRequest的实例

(2) response 不同: Response和 HttpResponse之间的差别

(3) 任何APIException 都会被捕捉

(4) Incoming requests will be authenticated and appropriate permission and/or throttle checks will be run before dispatching the request to the handler method.

和View一样,APIview的使用上只有两个比较大的区别,一、比较明确的区分get,post,put这样的请求的方式;二、一些不同的数据可以附加在类中,以实现不同的API policy

4.2 API policy

在了解API policy 之前,先了解如下内容,settings中有这些defaults such as:

DEFAULT_RENDERER_CLASSES: # use what renderers  when return a response obj

Default:[   'rest_framework.renderers.JSONRenderer','rest_framework.renderers.BrowsableAPIRenderer',
]

DEFAULT_PARSER_CLASSES   # the set of parses when accessing the request.data

Default:['rest_framework.parsers.JSONParser','rest_framework.parsers.FormParser','rest_framework.parsers.MultiPartParser'
]

DEFAULT_AUTHENTICATION_CLASSES  # determines the default set of authenticators used when accessing the request.user or request.auth properties

Default:['rest_framework.authentication.SessionAuthentication','rest_framework.authentication.BasicAuthentication'
]

DEFAULT_PERMISSION_CLASSES #determines the default set of permissions checked at the start of a view. Permission must be granted by every class in the list.

Defalut:['rest_framework.permissions.AllowAny',
]

DEFAULT_THROTTLE_CLASSES #  determines the default set of throttles checked at the start of a view.

Defalut:[
]

.etc

4.3 CVB and API policy (attr ------------> function)

 control the pluggable aspects of API views.          The following methods are used by REST framework to instantiate the various pluggable API policies. You won't typically need to override these methods.

.render_classes                                                      .get_renderers(self)

.parser_classes                                                      .get_parsers(self)

.authentication_classes                                          .get_authenticators(self)

.throttle_classes                                                      .get_throttles(self)

.permission_classes                                                .get_permissions(self)

.content_negotiation_classed                                  .get_content_negotiator(self)

4.4 FVB and API policy (通过修饰器进行描述)

from rest_framework.decorators import api_view, throttle_classes
from rest_framework.throttling import UserRateThrottleclass OncePerDayUserThrottle(UserRateThrottle):rate = '1/day'@api_view(['GET'])
@throttle_classes([OncePerDayUserThrottle])
def view(request):return Response({"message": "Hello for today! See you tomorrow!"})
  • @renderer_classes(...)
  • @parser_classes(...)
  • @authentication_classes(...)
  • @throttle_classes(...)
  • @permission_classes(...)

Rest_FrameWork(3):Wrapping API views相关推荐

  1. python django restful_详解Django rest_framework实现RESTful API

    一.什么是REST 面向资源是REST最明显的特征,资源是一种看待服务器的方式,将服务器看作是由很多离散的资源组成.每个资源是服务器上一个可命名的抽象概念.因为资源是一个抽象的概念,所以它不仅仅能代表 ...

  2. Tutorial 2: Requests and Responses

    转载自:http://www.django-rest-framework.org/tutorial/2-requests-and-responses/ Tutorial 2: Requests and ...

  3. Django rest_framework 实用技巧

    前言: 最近工作中需要用到Django rest_framework框架做API, 边学边写,记录了一些实际工作中需要用到的功能,不是很全也不系统,以后需要什么功能可以在这查询. 后续还会更新其它的用 ...

  4. python生成api文档_Django 自动生成api接口文档教程

    最近在写测试平台,需要实现一个节点服务器的api,正好在用django,准备使用djangorestframework插件实现. 需求 实现一个接口,在调用时,通过传递的参数,直接运行对应项目的自动化 ...

  5. python api接口生成_Django 自动生成api接口文档教程

    最近在写测试平台,需要实现一个节点服务器的api,正好在用django,准备使用djangorestframework插件实现. 需求 实现一个接口,在调用时,通过传递的参数,直接运行对应项目的自动化 ...

  6. python restful api_Python利用Django如何写restful api接口详解

    前言 用Python如何写一个接口呢,首先得要有数据,可以用我们在网站上爬的数据,在上一篇文章中写了如何用Python爬虫,有兴趣的可以看看:https://www.jb51.net/article/ ...

  7. django3安装rest_framework,并测试

    restframework 主要用于访问数据的接口 django负责后端处理 restframework用于连接django,并且把数据转化成为json数据,然后发送给浏览器 安装restframew ...

  8. django restful mysql_如何用Django和restful搭建api接口服务

    因为在一个项目需要接口服务.通过接口url可以实现写入和读取等功能. django 搭建web服务 1)新建一个 django project django-admin.py startproject ...

  9. Django Rest_Framework(DRF)

    文章目录 一.主要内容 1.web开发模式 2.API接口 3.接口测试工具:Postman 4.序列化 5.Restful规范(重点) 6.Django Rest_Framework(drf) 7. ...

最新文章

  1. Node.js制作图片下载爬虫的一般步骤
  2. 正则表达式练习 Regex Golf
  3. [洛谷1390]公约数的和
  4. Centos7系统启动流程
  5. windows安装 Chocolatey
  6. XML基础——extensible markup language
  7. string拼接_String拼接操作-的优化
  8. mysql show
  9. Java 学习笔记之 Synchronized锁重入
  10. 数据库路由中间件MyCat - 使用篇(1)
  11. 利用Easy-Rules实现动态业务规则
  12. windows版redis报错:本地计算机上的Redis服务启动后停止
  13. Unity3D学习笔记——layer
  14. android 百度地图
  15. android移动日记代码,Android开源项目-小熊日记源码
  16. 2023年全国最新高校辅导员精选真题及答案53
  17. 优秀的程序员都在关注「沉默王三」公众号
  18. 大数据平台数据治理体系建设和管理方案
  19. 二进制部署K8S集群
  20. 鲨鱼抓包(Wireshark)简易操作说明

热门文章

  1. 阿里云服务器的网站被提示该内容禁止访问的解决办法
  2. 关于裁判文书网的一些建议
  3. 如何做一份好的竞品分析:商业WIFI竞品分析让你不再跳坑
  4. BGP比较基础的实验
  5. 微信二维码 活码转跳
  6. 2020.7.7 ETH价格分析
  7. 基于FFmpeg+rtsp读取摄像头实时图像
  8. 华视电子读卡器100N,读取二代身份证信息
  9. POI入力自定义格式数据
  10. 文件管理android2.3,华为手机文件管理器(com.huawei.hidisk) - 10.11.11.301 - 应用 - 酷安...