请求与响应
请求
# 请求对象 # from rest_framework.request import Request def __init__(self, request, parsers=None, authenticators=None, negotiator=None, parser_context=None): # 断言 判断request是否是django的HttpRequest的对象 # 提高程序的健壮性 assert isinstance(request, HttpRequest), ( 'The `request` argument must be an instance of ' '`django.http.HttpRequest`, not `{}.{}`.' .format(request.__class__.__module__, request.__class__.__name__) ) # 二次封装request,将原生的request作为drf request对象的 _request属性 self._request = request def __getattr__(self,item): # 通过反射,如果要取request.method,是去_request里面去取了 return getattr(self,_request,item) # 请求对象.data:前端以三种编码方式传入的数据都可以取出来 # 请求对象.query_params 与Django标准的request.GET相同,只是更换了更正确的名称而已。
响应
# from rest_framework.response import Response def __init__(self, data=None, status=None, template_name=None, headers=None, exception=False, content_type=None): # data:你要返回的数据,字典 # status:返回的状态码,默认是200 -from rest_framework import status 在这个路径下,它把所有使用到的状态码都定义成了常量 # template_name 渲染的模板的名字(自定义模板),不需要了解 # headers:响应头,可以往响应头放东西,就是一个字典 # content_type:响应的编码格式,application/json 和 text/html # 浏览器响应成浏览器的格式,postman响应成json格式,通过配置实现的(默认配置) # 不管是postman还是浏览器,都返回json格式数据 # drf有默认的配置文件--->先从项目的settings中找,找不到,采用默认的 # drf的配置信息,先从自己类中找--->项目的settings中找--->默认的找 -局部使用:对某个视图类有效 -在视图类中写如下 from rest_framework.renderers import JSONRenderer renderer_classes = [JSONRenderer,] -全局使用:全局的视图类,所有的请求,都有效 -在setting.py中加入如下 # 这个变量REST_FRAMEWORK,里面都是drf的配置信息 REST_FRAMEWORK = { 'DEFAULT_RENDERER_CLASSES': ( # 默认响应渲染类 'rest_framework.renderers.JSONRenderer', # json渲染器 'rest_framework.renderers.BrowsableAPIRenderer', # 浏览API渲染器 ) }