首页 > 其他分享 >drf请求

drf请求

时间:2023-09-04 16:14:15浏览次数:28  
标签:请求 res request 视图 响应 格式 data 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

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

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格式

 

标签:请求,res,request,视图,响应,格式,data,drf
From: https://www.cnblogs.com/YeeQX/p/17677324.html

相关文章

  • vue3+ts Axios封装—重复请求拦截
    创建好vue3项目1.安装Axios与ElementPlusAxios安装npminstallaxiosElementPlus安装官网入口:https://element-plus.gitee.io/zh-CN/npminstallelement-plus--saveElement主要用到信息提示与全屏加载动画2.在src目录下创建api文件夹和utils文件夹api......
  • nginx 请求转发
    1、修改启动端口因为80端口容易冲突2、配置服务器地址在http中添加下面的配置http{server{listen9001;server_namelocalhost;location~/acl/{proxy_passhttp://l......
  • 深入了解Axios:现代化的HTTP请求库
    简介:Axios是一个基于Promise的现代化HTTP请求库,它在前端开发中被广泛使用。本文将深入探讨Axios的特性、用法以及为什么它成为开发者的首选。一、什么是Axios?Axios是一个基于Promise的HTTP客户端,用于浏览器和Node.js环境中发送HTTP请求。它是一个简洁、直观且功能强大的库,提供了......
  • reduce实现异步串行重复请求同一个接口
    在项目中会遇到循环请求接口的情况,不管使用for、forEach、map进行循环都会出现并行请求接口出现高并发,使用reduce实现异步串行重复请求同接口,等待上一次请求结束后在进入下一次请求。需要循环的对象数组:letloopList=[{code:1,name:"名称1",p......
  • django+drf开发一些个人的标准化
    最近在改造一下个人的开发风格。特分享一下。子应用我一般放在apps中,每个不同模块的子应用起不同的名字。startapp后自己移动一下,记得修改一下Appconfig中的name即可。子应用中创建services.py或者如有需要可以创建services模块再细分。所有业务放到services中编写。views一律......
  • Gateway跨域请求配置
    importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.http.HttpHeaders;importorg.springframework.http.HttpMethod;importorg.springframework.http.HttpStatus;importor......
  • 同时创建作者和作者详情表,ModelSerializer使用,模块与包的使用,反序列化校验源码分析
    1同时创建作者和作者详情表1.1django项目改名字后顺利运行#1先改文件夹名#2改项目名#3改项目内的文件夹名#4替换掉所有文件中的drf_day04---》drf_day05#5命令行中启动:pythonmanage.pyrunserver#6setting--->django--->指定项目根路径1.1作者......
  • fastapi 的 TestClient 的 delete 方法如何传递请求体?
    在FastAPI的TestClient中,delete方法通常不适用于传递请求体(payload)。DELETE请求通常不允许发送请求体。不过,根据HTTP规范,您可以通过在URL中包含查询参数或使用params参数来传递参数。以下是使用FastAPI的TestClient进行DELETE请求时传递参数的示例:fromfastapi.testclientimportT......
  • Web阶段:第二十章:Ajax请求
    什么是Ajax请求?AJAX即“AsynchronousJavascriptAndXML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。ajax是一种浏览器异步发起请求。局部更新页面的技术。1、异步发起请求2、局部更新页面原生Ajax请求的实现(了解)<scripttype="text/javascript">func......
  • 同时创建一对一表关系字段(作者和作者详情为例)、ModelSerializer使用、模块与包的使用
    同时创建一对一表关系字段(作者和作者详情为例)序列化器#作者表序列化类classAuthorSerializer(serializers.Serializer):name=serializers.CharField(max_length=32)age=serializers.IntegerField()sex=serializers.CharField(max_length=16)addr......