django-restframework:组件1-APIView
1 使用django restframework
pip install djangorestframework ps:下载版本3.12.4
2 CBV模式views
查看APIView源码:
注释说明,基于会话的身份验证是显式CSRF验证的,所有其他身份验证都是CSRF豁免的,所以我们可以不需要在dispatch中增加csrf_exempt
注意:因为settings中csrf中间件存在,post请求如果不带上csrftoken会导致403错误,CBV模式下,CSRF需要在dispatch中调用csrf_exempt装饰器豁免
postman调试(post请求在body中传参):
注意:在djangorestframework的APIView(rest_framework.views)中,post请求一般是request.data获取用户传参(request.POST无法拿到);在django的View(django.views)中,post请求一般是request.POST.dict()来获取用户传参,同理,APIView依靠request.data拿到的也是QueryDict类型数据,也可以通过dict()转换为需要的字典数据
—————————————————————————————
**djangorestframework官方文档扩展
**(https://www.django-rest-framework.org/tutorial/2-requests-and-responses/):
请求对象(Request objects)
REST框架引入了一个扩展了常规HttpRequest的Request对象,并提供了更灵活的请求解析。Request对象的核心功能是request.data属性,它与request.POST类似,但对于使用Web API更为有用。
request.POST # 只处理表单数据 只适用于’POST’方法
request.data # 处理任意数据 适用于’POST’,'PUT’和’PATCH’方法
响应对象(Response objects)
REST框架还引入了一个Response对象,这是一种获取未渲染(unrendered)内容的TemplateResponse类型,并使用内容协商来确定返回给客户端的正确内容类型。
return Response(data) # 渲染成客户端请求的内容类型。
状态码(Status codes)
在你的视图(views)中使用纯数字的HTTP 状态码并不总是那么容易被理解。而且如果错误代码出错,很容易被忽略。REST框架为status模块中的每个状态代码(如HTTP_400_BAD_REQUEST)提供更明确的标识符。使用它们来代替纯数字的HTTP状态码是个很好的主意。
包装(wrapping)API视图
REST框架提供了两个可用于编写API视图的包装器(wrappers)。
用于基于函数视图的@api_view装饰器。
用于基于类视图的APIView类。
这些包装器提供了一些功能,例如确保你在视图中接收到Request实例,并将上下文添加到Response,以便可以执行内容协商。
包装器还提供了诸如在适当时候返回405 Method Not Allowed响应,并处理在使用格式错误的输入来访问request.data时发生的任何ParseError异常。