DRF请求和响应
目录
Request类
经过rest framwork 传入视图函数的request已经不是原来的request了, 而是Request的类产生的对象request.
rest framwork 提供了Parser解析器, 在收到请求后会根据Content-Type知名的请求数据类型,如JSON,表单等. 将请求数据进行parse解析, 解析为类字典[QueryDict]对象保存到Request对象中.
Request对象的数据是自动根据前端发送数据的格式进行讲解细致和的结果
常用参数
data
POST,PUT,PATCH请求方式解析后的数据,, (原生django的PUT请求再request.POST中取不到)
query_params
与原生的GET一样.
其他的方法和原来的request使用方法一致.
底层原理: 在Request实例化对象时, self._request=request, 将原来的request对象给了Request的对象, 又在Request类中定义了__getattr__魔法方法, 挡在视图函数中获取request对象的属性和方法时, 找不到就会触发魔法方法的执行, 利用反射获取原来的request对象中的方法
-
def __getattr__(self, attr):
-
"""
-
If an attribute does not exist on this instance, then we also attempt
-
to proxy it to the underlying HttpRequest object.
-
"""
-
try:
-
return getattr(self._request, attr)
-
except AttributeError:
-
return self.__getattribute__(attr)
Response类
实例化参数
- data(列表胡总和字典, 序列化成json字符串返回给前端)
- status(响应状态码, 默认是200: from rest_framework.status import HTTP_200_OK)
- headers(响应头, 以字典的形式返回给前端)
- content_type(乡音编码格式)
- template_name(指定模板)
-
class Test(APIView):
-
def get(self, request):
-
return Response(data={}, status=status.HTTP_201_CREATED, headers={'name': 'yietong'})
请求编码与相应编码
能够解析的请求编码
drf默认能够解析urlencoded, form-data,json
其实是通过配置文件配置的, 在rest_framwork包下的settings.py中
-
DEFAULTS = {
-
# Base API policies
-
'DEFAULT_PARSER_CLASSES': [
-
'rest_framework.parsers.JSONParser', # 可以解析json格式
-
'rest_framework.parsers.FormParser', # 可以解析urlencoded格式
-
'rest_framework.parsers.MultiPartParser' # 可以解析form-data格式
-
],
想在项目中配置REST_FRAMEWORK,需要像下边这样在项目配置文件中配置。
-
"""
-
Settings for REST framework are all namespaced in the REST_FRAMEWORK setting.
-
For example your project's `settings.py` file might look like this:
-
-
REST_FRAMEWORK = {
-
'DEFAULT_RENDERER_CLASSES': [
-
'rest_framework.renderers.JSONRenderer',
-
'rest_framework.renderers.TemplateHTMLRenderer',
-
],
-
'DEFAULT_PARSER_CLASSES': [
-
'rest_framework.parsers.JSONParser',
-
'rest_framework.parsers.FormParser',
-
'rest_framework.parsers.MultiPartParser',
-
],
-
}
-
"""
如果想让视图函数只解析指定格式的方法:
方式一:
在项目的settings.py中配置REST_FRAMEWORK。
-
REST_FRAMEWORK = {
-
'DEFAULT_PARSER_CLASSES': [
-
'rest_framework.parsers.JSONParser',
-
# 'rest_framework.parsers.FormParser',
-
# 'rest_framework.parsers.MultiPartParser',
-
],
-
}
方式二:
在视图类中定义parser_classes属性。
-
class Test(APIView):
-
from rest_framework.parsers import JSONParser, MultiPartParser, FormParser
-
parser_classes = [JSONParser]
-
-
def post(self, request):
-
return Response(request.data)
总结:解析类的执行顺序,先执行视图类自己的,在执行项目配置文件中的,最后执行rest_framework里的配置文件。
相应编码
默认情况下,相应编码是根据客户端的类型而定的,浏览器访问的话相应编码就是text/html,postman的相应编码是application/json。
配置相应编码格式也是两种方式
方式一:配置文件中配置
-
'DEFAULT_RENDERER_CLASSES': [
-
'rest_framework.renderers.JSONRenderer', # 只能相应json格式数据
-
# 'rest_framework.renderers.BrowsableAPIRenderer', # 浏览器格式
-
],
方式二:在视图类中配置
-
from rest_framework.renderers import JSONRenderer, BaseRenderer
-
renderer_classes = [BaseRenderer]
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgeifai
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01