drf请求
drf请求之Request类
1、新的request视图层的方法中的request都是这个类(from rest_framework.request import Request)的对象
2、使用request.data 取请求体中的数据(之前的Json传值request.body)
3、使用request.query_params 取请求参数中的数据
4、其他属性,用起来和之前一样
-request.method 的时候---》实际上 request._request.'method'---》反射出来的
-这个类from rest_framework.request import Request没有method,他会触发这个类的__getattr__---》
5 、FILES 用起来跟之前一样,前端传入的文件在里面
了解:
视图类方法中,self是咱们写的视图类 对象,self.request是新的request
控制前端请求的编码格式
前端传入的编码:urlencoded、json、form-data
某些接口只能接收到某种编码的处理方式
方式一:
FormParser:urlencoded
MultiPartParser:form-data
局部使用—在视图类上配置,且优先使用他
class BookView(APIView): # 视图类内的所有方法,只能接收json格式
parser_classes = [JSONParser]
方式二:
全局生效,在配置文件中写,所有接口都支持某一种或者某几种
全局使用后,再局部使用,只需要在视图类上加上即可,因为优先使用视图类
# 全局如果用了,局部这样配,优先用局部的,也就是这个类管理的接口,只能接收form-data格式
class BookView(APIView):
parser_classes = [MultiPartParser]
drf自己有默认配置,默认配置就是支持三种,所以我们即使没有配置,也可以使用三种。
drf之响应
drf之Response对象源码
Response
__init__ 中需要传这几个参数,不传也可以
data=None # 字符串,列表,字典----》放在了响应 体 中 ---》第一个参数是它
status = None #http响应状态码,默认是200,可以改成3xx、4xx、5xx,不能改为1xx,因为1xx请求正在处理中,执行代码后会崩掉
content_type=None #响应编码格式(这个不用管,用浏览器访问就是text/html,用postman就是:json格式)
template_name=None #模板名字 默认是:rest_framework/api.html 可以定制自己返回页面的样式
通过res.data可以取到当时放的data
res=Response(data={},status=500,headers={'xxx':'yyy'}) #响应状态码是500,请求头是{'xxx':'yyy'}
print(res.data) #{}
return res
取当时放的响应头:
res.headers 拿不到数据,可以通过下面的方式或得到
print(res['xxx']) #yyy
print(res.has_header('zzz')) #False 这里是判断请求头是否是zzz
源码:
原生django怎么给响应头写入数据
直接在HttpResponse响应对象中添加键值对
JsonResponse也是同理,在响应对象中添加键值对
drf之响应格式
响应编码格式:默认支持json和text/html(浏览器)
局部使用:
class BookView(APIView):
renderer_classes = [BrowsableAPIRenderer] #只支持浏览器格式
全局使用:
局部禁用:
当全局已经配置,局部想要限制的话,可以直接局部限制,也就是上述的局部使用
如果不配置:
有默认格式,解析方面:三种编码都能解析,响应方面:浏览器访问看到浏览器的样子,postman访问看到json格式