一、断言

详见博客:https://www.cnblogs.com/zhihuanzzh/p/16796885.html

# 我们可以发现源码中大量使用try和断言

# 关键字assert ,有什么作用?
# 我断定你是xx,如果不是就抛异常 name = 'lqz' # if name == 'lqz':
# print('对了')
# else:
# # print('错了')
# raise Exception('名字不为lqz,不能继续走了') assert name=='lqz' # 断定是,如果不是,就抛异常 print('后续代码')

二、drf之请求

2.1 Request能够解析的前端传入的编码格式

需求:该接口只能接收json格式,不能接收其他格式

方式一:在继承自APIView及其子类的的视图类中配置(局部配置)

# 总共有三个:from rest_framework.parsers import JSONParser,FormParser,MultiPartParser
class BookView(APIView):
parser_classes = [JSONParser,]
'我们在APIView中可以看到一个属性叫做parser_classes,ctrl点击他后面的方法DEFAULT_PARSER_CLASSES,我们可以看到并不能直接点进来,但是这里我们可以去rest_frameword的配置文件中找,找到一个叫settings.py的文件就能在内部找到DEFAULT_PARSER_CLASSES,他的使用当时也是类似我们配置文件中的注册,'

方式二:在配置文件中配置(影响所有,全局配置)

	-django有套默认配置,每个项目有个配置
-drf有套默认配置,每个项目也有个配置---》就在django的配置文件中
REST_FRAMEWORK = {
'DEFAULT_PARSER_CLASSES': [
# 'rest_framework.parsers.JSONParser',
'rest_framework.parsers.FormParser',
# 'rest_framework.parsers.MultiPartParser',
],
}

方式三:全局配了1个,某个视图类想要3个,怎么配?

	-只需要在视图类,配置3个即可
-因为:先从视图类自身找,找不到,去项目的drf配置中找,再找不到,去drf默认的配置找

2.2 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': 'jasper'})

三、drf之响应

3.1 Response能够响应的编码格式

# drf  是djagno的一个app,所以要注册,不注册的话不能用浏览器访问接口
# drf的响应,如果使用浏览器和postman访问同一个接口,返回格式是不一样的(浏览器会报错,postman返回数据)
-drf做了个判断,如果是浏览器,好看一些,如果是postman只要json数据 # 方式一:在视图类中写(局部配置)
-两个响应类---》找---》drf的配置文件中找--》两个类(也是在rest_framework的settings.py文件中)
-from rest_framework.renderers import JSONRenderer,BrowsableAPIRenderer
class BookView(APIView):
renderer_classes=[JSONRenderer,] # 方式二:在项目配置文件中写(全局配置)
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
],
} # 方式三:使用顺序(一般就用内置的即可)
优先使用视图类中的配置,其次使用项目配置文件中的配置,最后使用内置的

3.2 Resposne的源码属性或方法

# drf 的Response 源码分析
-from rest_framework.response import Response
-视图类的方法返回时,retrun Response ,走它的__init__,init中可以传什么参数 # Response init可以传的参数
def __init__(self,
data=None,
status=None,
template_name=None,
headers=None,
exception=False,
content_type=None) -data:之前咱们写的ser.data 可以是字典或列表,字符串---》序列化后返回给前端---》前端在响应体中看到的就是这个
-status:http响应的状态码,默认是200,你可以改
-drf在status包下,把所有http响应状态码都写了一遍,常量
-from rest_framework.status import HTTP_200_OK
-Response('dddd',status=status.HTTP_200_OK) -template_name:了解即可,修改响应模板的样子,BrowsableAPIRenderer定死的样子,后期公司可以自己定制
-headers:响应头,http响应的响应头
-考你,原生djagno,如何像响应头中加东西
# 四件套 render,redirect,HttpResponse,JsonResponse
obj = HttpResponse('dddd')
obj['xxc'] = 'yyc'
return obj -content_type :响应编码格式,一般不动 # 重点:data,status,headers

断言、drf之请求与响应的更多相关文章

  1. Django框架之drf:5、反序列化器校验部分源码分析、断言、drf之请求与响应、视图组件介绍及两个视图基类、代码部分实战

    Django框架之drf 目录 Django框架之drf 一.反序列化类校验部分源码解析 二.断言 三.drf之请求 1.Request能够解析的前端传入编码格式 2.Request类中的属性和方法 ...

  2. DRF视图-请求与响应

    DRF视图 drf的代码简写除了在数据序列化体现以外,在视图中也是可以的.它在django原有的django.views.View类基础上,drf内部封装了许多子类以便我们使用. Django RES ...

  3. drf入门规范、序列化器组件、视图组件、请求与响应

    DRF框架之入门规范 ​ 本篇文章会详细介绍web开发模式.API接口及其接口测试工具.restful规范.还有经常分不清又很重要的序列化与反序列化的部分,初级交接触APIView.Request类. ...

  4. 第二章、drf框架 - 请求模块 | 渲染模块 解析模块 | 异常模块 | 响应模块 (详细版)

    目录 drf框架 - 请求模块 | 渲染模块 解析模块 | 异常模块 | 响应模块 Postman接口工具 drf框架 注册rest_framework drf框架风格 drf请求生命周期 请求模块 ...

  5. DRF的请求响应组件

    目录 DRF的请求响应组件 请求模块(request) 概念 request源码简单分析 响应模块(response) 概念 使用方法 response源码简单分析: 解析模块(parse) 概念 使 ...

  6. drf请求、响应与视图

    目录 一.请求 1 定义 2 常用属性 1).data 2).query_params 二.响应 1 Response 2 构造方法 3 状态码 1)信息告知 - 1xx 2)成功 - 2xx 3)重 ...

  7. drf中的请求与响应

    请求与响应(3星) 请求:Request REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST framework提供的扩展了Ht ...

  8. DRF提供的请求与响应类

    一 内容协商 drf除了在数据序列化部分简写代码以外,还在视图中提供了简写操作.所以在django原有的django.views.View类基础上,drf封装了多个视图子类出来提供给我们使用. Dja ...

  9. drf-drf请求、响应、基于GenericAPIView+5个视图扩展类

    1.反序列化类校验部分源码分析(了解) 1.当我们在视图类中生成一个序列化类对象ser,并且用ser.is_valid()是就会执行校验,校验通过返回True,不通过返回False.首先对象ser和序 ...

  10. drf框架 - 请求模块 | 渲染模块

    Postman接口工具 官方 https://www.getpostman.com/ get请求,携带参数采用Params​post等请求,提交数据包可以采用三种方式:form-date.urlenc ...

随机推荐

  1. 活动预告 | 中国数据库联盟(ACDU)中国行定档深圳,一起揭秘数据库前沿技术

    在当今数字化时代,数据库是各行各业中最核心的信息管理系统之一.随着技术的飞速发展,数据库领域也不断涌现出新的前沿技术和创新应用.数据库运维和开发人员需要紧跟前沿技术,才能保持竞争力,并实现更高效.更智 ...

  2. 数组对象删除不满足某些条件的对象 js

    recursiveFunction(items, childrenNodeName, ids) { console.log('items', ids); // 获取数组长度 if (items) it ...

  3. webpack 的优点

    1. 社区庞大,活跃,紧跟技术的前言,不断发展迭代 : 2. 专注处理模块化的项目,可以开箱即用 : 3. 通过 loader 扩展,可以把所有类型的文件解析打包 : 4. 通过plugin 扩展 , ...

  4. SQLServer数据库日志太大处理方式

    SQLServer数据库日志太大处理方式 1.1 如下图,点击连接登陆数据库 1.2 如下图,打开数据库属性窗口 1.3 如下图,更改数据库恢复模式 1.4 如下图,收缩数据库日志 到这里已经完成了, ...

  5. KubeSphere 宣布开源 Thanos 的企业级发行版 Whizard

    日前,青云科技宣布开源 Thanos 的企业级发行版 Whizard,为企业带来真正高可用.可扩展.可存储与查询海量监控数据.易运维.安全的 Prometheus 长期存储方案. Prometheus ...

  6. KubeSphere 社区双周报 | KubeKey 支持 Web UI | 2023.10.13-10.26

    KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...

  7. AI实战篇:Spring AI + 混元 手把手带你实现企业级稳定可部署的AI业务智能体

    前言 在之前的内容中,我们详细讲解了Spring AI的基础用法及其底层原理.如果还有小伙伴对此感到困惑,欢迎参考下面这篇文章,深入学习并进一步掌握相关知识:https://www.cnblogs.c ...

  8. 01_GoLand debug时出现Connected并且程序卡住的问题

    01_GoLand debug时出现Connected并且程序卡住的问题 环境:win10.go version go1.19.4 windows/amd64.GoLand 2020.3.5 x64 ...

  9. UniswapV2Factory细节

    UniswapV2Factory合约是Uniswap V2协议中的关键部分,负责管理和创建所有的流动性池(交易对).以下是对UniswapV2Factory合约中所有主要方法及其参数的详细讲解. 方法 ...

  10. NOIP2024模拟11:忠于自我

    NOIP2024模拟11:忠于自我 T1 一句话题意:有若干个容量为 \(L\) 的包,从左往右装物品,当前包还能装则装,否则必须重开一个包装进去,对于\(\forall i \in [1,n]\), ...