目录
Request是包装后的request,前面源码分析过了
不会DRF?源码都分析透了确定不来看? - HammerZe - 博客园 (cnblogs.com)
前面的文章介绍到,新包装的Request对象和原来django的request对象没有什么区别,使用方法一样,只是多了request.data
,当然区别也不止这一点,我们看一下目录
默认的情况下,三种数据格式(urlencoded,formdata,json)都可以解析
比如当请求(post)过来要新增一条数据,那么我们可以针对该请求的数据格式做要求,比如只能提交json格式,或者允许From-data和json等···通过写接口实现,需要进行局部(views)或者全局配置(settings)
from rest_framework.parsers import JSONParser, FormParser, MultiPartParser
配置在视图类里
'''views.py'''
# 作者详情视图类
from rest_framework.parsers import JSONParser, FormParser, MultiPartParser
class AuthorDetailView(APIView):
# 只处理json格式,默认三种格式都可以
# parser_classes = [JSONParser, FormParser, MultiPartParser]
parser_classes = [JSONParser]
def post(self, request):
# 获取反序列化数据
ser = serializer.AuthorDetailSerializer(data=request.data)
if ser.is_valid():
# 校验通过存入数据库,不需要重写create方法了
ser.save()
return Response({'code': 100, 'msg': '新增成功', 'data': ser.data})
# 校验失败
return Response({'code': 101, 'msg': '校验未通过', 'error': ser.errors})
注意
在局部配置的时候千万注意,如果parser_classes=[]
,那么什么数据格式都不解析
导入:from rest_framework import settings
源码解释
'''Settings for REST framework are all namespaced in the REST_FRAMEWORK setting.
For example your project's `settings.py` file might look like this:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.TemplateHTMLRenderer',
],
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser',
'rest_framework.parsers.FormParser',
'rest_framework.parsers.MultiPartParser',
],
}
'''
全局settings.py配置
from rest_framework import settings
REST_FRAMEWORK = {
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser',
'rest_framework.parsers.FormParser',
'rest_framework.parsers.MultiPartParser',
],
}
'''默认是三种数据格式都解析的,想解析哪种写哪种就行了'''
总结
导入:from rest_framework.response import Response
源码
class Response(SimpleTemplateResponse):
def __init__(self, data=None, status=None,
template_name=None, headers=None,
exception=False, content_type=None):
·····
ps:上三常用,下三了解即可
导入:from rest_framework.renderers import JSONRenderer,BrowsableAPIRenderer
通过renderer_classes配置解析格式
'''views.py'''
from rest_framework.renderers import JSONRenderer,BrowsableAPIRenderer
class PublishView(APIView):
renderer_classes = [JSONRenderer, ]
····
注意
如果只配置JSONRenderer,那么浏览器访问也是json格式数据
settings.py配置
默认两种都解析,取各自所需
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': ( # 默认响应渲染类
'rest_framework.renderers.JSONRenderer', # json渲染器
'rest_framework.renderers.BrowsableAPIRenderer', # 浏览API渲染器
)
}
总结