先看Django
请求信息来了之后有request.body和request.post等等
request.body是请求体内容,如果请求体有内容,它就有内容
那request.post里面的数据哪里来的呢
是通过request.body解析来的,
如果请求头中的Content-Type:application/x=www-form-urlencond,数据格式符合:name=alex&age=18 (form表单提交符合,ajax在不改变请求头下也符合)
就会把request.body的数据解析到request.post
上面解析过程用到的就叫做解析器,是django自带的解析器
下面讲rest_framework的解析器,也是对请求体数据进行解析,不过功能要强大的多
先看自带的JSON解析器(最重要的一个):
from rest_framework.parsers import JSONParser
class Eg(APIView):
parser_classes = [JSONParser] #局部使用的解析器
def post(self,request,*args,**kwargs):
'''允许用户发送JSON格式数据
conteny-type:application/json #请求头只能是这样的,不然报错
数据:{"name":''yue,'age':18}
'''
print(request.data) #直接可以拿到数据{"name":''yue,'age':18}
return HttpResponse("POST")
parser_classes 里面可以加多个解析器
比如再加一个:
from rest_framework.parsers import JSONParser,FormParser
parser_classes = [JSONParser,FormParser]
FormParser支持解析的是:Content-Type:application/x=www-form-urlencond
这样一来就有了两个解析器可以用,会自动根据请求头选择对应解析器
全局配置:
REST_FRAMEWORK = {
'DEFAULT_PARSER_CLASSES': (
'djangorestframework_camel_case.parser.CamelCaseJSONParser',
#'rest_framework.parsers.FormParser',
#'rest_framework.parsers.MultiPartParser'
#'rest_framework.parsers.JSONParser',
),
}