1.请求Request
# 请求对象
# from rest_framework.request import Request
def __init__(self, request, parsers=None, authenticators=None,
negotiator=None, parser_context=None):
# 二次封装request,将原生request作为drf request对象的 _request 属性
self._request = request
def __getattr__(self,item):
return getattr(self._request,item)
# 请求对象.data:前端post以三种编码方式传入的数据,都可以取出来
# 请求对象..query_params 与Django标准的request.GET相同,只是更换了更正确的名称而已。
# 属性:
request.data
request.query_params
request._request 原来的request
request.method --->就是使用了原来的request的method 通过重写 __getattr__魔法方法实现的
# 默认情况下post提交数据,可以三种方式(form-data,urlencoded,json),都能处理
# 我们只允许接口接收json格式,其他格式不支持
# 方式一:全局配置,在配置文件中
REST_FRAMEWORK = {
# 默认能够解析的编码方式
'DEFAULT_PARSER_CLASSES': (
'rest_framework.parsers.JSONParser', # json的
# 'rest_framework.parsers.FormParser', # urlencoded的
# 'rest_framework.parsers.MultiPartParser' # form-data的
)
}
#方式二: 局部配置:(视图类)
class PublishView(APIView):
parser_classes = [FormParser,] # 优先级更高
# 优先级:先用视图类自己的,再用配置文件---》drf的默认配置
2.响应 Response
#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有默认的配置文件---》先从项目的setting中找,找不到,采用默认的
# drf的配置信息,先从自己类中找--》项目的setting中找---》默认的找
-局部使用:对某个视图类有效
-在视图类中写如下
from rest_framework.renderers import JSONRenderer
renderer_classes=[JSONRenderer,]
-全局使用:全局的视图类,所有请求,都有效
-在setting.py中加入如下
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': ( # 默认响应渲染类
'rest_framework.renderers.JSONRenderer', # json渲染器
'rest_framework.renderers.BrowsableAPIRenderer', # 浏览API渲染器
)
}
# 属性:
data:返回给前端的数据,可以是字典,列表,字符串
status:响应状态码,1xx 2xx 3xx 4xx 5xx
template_name : 不用,替换模板
headers=None :响应头
#默认用浏览器可以看到页面,用postman可以看到jon
#只能显示json
# 方式一:全局配置,在配置文件中
REST_FRAMEWORK = {
# 使用的渲染类
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
# 'rest_framework.renderers.BrowsableAPIRenderer',
)
}
# 局部配置:(视图类)
class PublishView(APIView):
renderer_classes = [JSONRenderer,]
# 优先级:先用视图类自己的,再用配置文件---》drf的默认配置