drf请求和响应、GenericAPIView封装、5个视图扩展类
1、
视图类继承APIView后多了 -0 去除了csrf认证 -1 新的request -request.data -request.query_params -request.其他跟之前一样 -request._request 是老的 -2 三大认证 -3 全局异常
from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.parsers import JSONParser, FormParser, MultiPartParser from rest_framework.renderers import JSONRenderer, BrowsableAPIRenderer # JSONParser:解析json格式 # FormParser:urlencoded # MultiPartParser:form-data
局部限制
写一个类属性 parser_classes = [JSONParser或者FormParser、MultiPartParser]
class BookView(APIView):
# 类属性
parser_classes = [JSONParser]
def get(self, request):
res = Response(data={123}, status=500, headers={'xxx': 'yyy'})
print(res.data)
return res
def post(self, request):
print(self.parser_classes)
print(request.data)
return Response('新增')
效果:

全局限制
REST_FRAMEWORK = {
#####请求体的限制
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser',
'rest_framework.parsers.FormParser',
# 'rest_framework.parsers.MultiPartParser'
],
#####响应格式的限制
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
],
}
补充:
全局使用后,局部再限制---》只需要在视图类上加即可
全局如果用了,局部这样配,优先用局部的,也就是这个类管理的接口,只能接收form-data格式 parser_classes = [MultiPartParser]
二、
1、
# from rest_framework.response import Response
### __init__ 中需要传这几个参数,不传也可以
data=None # 字符串,列表,字典----》放在了响应 体 中 ---》第一个参数是它
status=None, # http响应状态码,默认是200,千万不能写成1xx
headers=None, # http响应头,后期我们可以往响应头中放数据
content_type=None # 响应编码格式(不用管,用浏览器访问就是:text/html,用postman就是:json格式)
template_name=None # 模版名字 默认是:rest_framework/api.html 了解,可以定制自己返回的页面样子
###补充:后面会用---》通过res.data 就能取到当时放的datga
res=Response(data={},status=500,headers={'xxx':'yyy'})
print(res.data)
return res
### 补充:取当时放的响应头
res.headers 拿不到数据,可以通过下面的方式或得到
print(res['xxx'])
print(res.has_header('zzz'))
2、
响应有编码格式:默认支持json和text/html(浏览器)
# 修改只支持json
### 局部使用
class BookView(APIView):
renderer_classes = [BrowsableAPIRenderer]
### 全局使用
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
],
}
##局部禁用---》全局已经配置了---》局部想用浏览器的样子
class BookView(APIView):
renderer_classes = [BrowsableAPIRenderer]
# 如果不配置---》有默认
-解析:三种编码都能解析
-响应:浏览器访问看到浏览器的样子,postman访问,看到json格式
3、基于原生的django,向响应头写入数据
from django.http import HttpResponse
def custom_header_view(request):
# 创建一个HttpResponse对象
response = HttpResponse("Hello, World!")
# 向响应头添加自定义信息
response['X-Custom-Header'] = 'this is a test'
return response

三、