drf请求

发布时间 2023-09-04 16:02:29作者: 别管鱼油我了

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

某些接口只能接收到某种编码的处理方式

from rest_framework.parsers import JSONParser, FormParser, MultiPartParser

方式一:

   JSONParser:解析json格式
   FormParser:urlencoded
   MultiPartParser:form-data

  局部使用—在视图类上配置,且优先使用他

  class BookView(APIView):     # 视图类内的所有方法,只能接收json格式
    parser_classes = [JSONParser]

方式二:

  全局生效,在配置文件中写,所有接口都支持某一种或者某几种

 

全局使用后,再局部使用,只需要在视图类上加上即可,因为优先使用视图类

# 全局如果用了,局部这样配,优先用局部的,也就是这个类管理的接口,只能接收form-data格式

class BookView(APIView): 
    parser_classes = [MultiPartParser]

drf自己有默认配置,默认配置就是支持三种,所以我们即使没有配置,也可以使用三种。

 

drf之响应

drf之Response对象源码

from rest_framework.response import 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(浏览器)

from rest_framework.renderers import JSONRenderer, BrowsableAPIRenderer

局部使用:

class BookView(APIView):

  renderer_classes = [BrowsableAPIRenderer]   #只支持浏览器格式

全局使用:

 局部禁用:

  当全局已经配置,局部想要限制的话,可以直接局部限制,也就是上述的局部使用

如果不配置:

  有默认格式,解析方面:三种编码都能解析,响应方面:浏览器访问看到浏览器的样子,postman访问看到json格式