Django | 如何优雅的在某接口对其他接口的调用

简介: Django | 如何优雅的在某接口对其他接口的调用

开发中遇到的某个实际场景,在 django 中新增加一个 API 接口, 该接口部分的功能需要用到另一个接口的返回数据。

一个不那么优雅的解决方案是:在新接口中以 HTTP 请求的方式调用另一个接口,在理论上该方案是可行。

但是也会带来一系列的问题,比如性能并发等问题。毕竟 HTTP 通信建立连接等都有一定的耗时

更好的方案是通过函数调用的方式,在新接口中调用前接口的视图函数!我们都知道,Django 的请求数据都包装在 HttpRequest 对象中,既然我们要调用另一个接口的视图函数

那么就需要对 HttpRequest 对象进行封装,所以有必要了解一下 HttpRequest 对象

下面是我调试的图,request 对象的属性值都能一目了然

640.png

这里并不需要关注其他,我们只需要修改请求相关数据就可以

  • GET 包含所有 GET 参数的类字典对象
  • POST 包含所有 POST 参数的类字典对象
  • headeers 请求头相关
  • method 请求方法
  • body 请求体,POST 方法的数据就是从这里获取的

OK,了解上面所说的请求相关的数据就可以来构造我们自己请求体,然后调用前接口就可以了

这里有个小问题需要注意下 body 是 bytes 的数据类型,所以赋值的时候需要将字典类型转成 bytes,下面是该请求的原数据

640.png

接下来我将用 data 编码后数据类型重新赋值给 request.body

>>> data = {"name": "jerry", "code": "Python"}
>>> import json
>>> data = json.dumps(data).encode(encoding="utf-8")
>>> data
b'"{\\"name\\": \\"jerry\\", \\"code\\": \\"Python\\"}"'
>>> request.body = data

在输完最后一行赋值代码后,报错了

提示不能重置,原来是 body 属性是不可修改的。好在 django 还有另一个参数 _body, 而且 body 属性继承自 _body 属性, 所以直接修改 _body 属性就好了

>>> request._body = data
>>> data
b'"{\\"name\\": \\"jerry\\", \\"code\\": \\"Python\\"}"

赋值之后我们再来查看下 body 的值

640.png

可以看到,已经修改成我们想要的数据了。接下来将这个 request 对象传给之前的接口就完事了!

相关文章
|
6月前
|
JavaScript 数据库 Python
django实现增删改查分页接口
django实现增删改查分页接口
|
前端开发 API 数据格式
Django的restframework接口框架自定义返回数据格式
在前后端分离是大趋势的背景下,前端获取数据都是通过调用后台的接口来获取数据微服务的应用越来越多。Django是Python进行web应用开发常用的web框架,用Django框架进行web应用框架减少了很多工作,通常用很少量的代码就可以实现数据的增、删、改、查的业务应用,同样用Django的restframework的框架对外发布接口也是非常的简单方便,几行代码就可以将数据对象通过接口的方式提供服务。因为在实际开发过程中接口的返回数据有一定的格式,本文介绍通过自定义Response返回对象来自定义接口返回数据格式。
191 1
|
3月前
|
存储 缓存 关系型数据库
Django后端架构开发:缓存机制,接口缓存、文件缓存、数据库缓存与Memcached缓存
Django后端架构开发:缓存机制,接口缓存、文件缓存、数据库缓存与Memcached缓存
63 0
|
6月前
|
前端开发 数据库 Python
使用 Python 的 Web 框架(如 Django 或 Flask)来建立后端接口,用于处理用户的请求,从数据库中查找答案并返回给前端界面
【1月更文挑战第13天】使用 Python 的 Web 框架(如 Django 或 Flask)来建立后端接口,用于处理用户的请求,从数据库中查找答案并返回给前端界面
244 7
|
5月前
|
API Python JSON
使用django创建简单restful应用接口的步骤
【6月更文挑战第2天】本文简介使用Django创建API服务涉及安装djangorestframework,创建api应用,定义URL路由,编写视图和序列化器。这个过程展示了如何用Django Rest Framework构建JSON格式的API。
53 2
|
数据库 网络架构 Python
18-Django REST framework-使用Django开发REST 接口
18-Django REST framework-使用Django开发REST 接口
|
JSON 数据格式 Python
django drf 案例--实现url编码和json和dict格式转化小工具(涉及定义模型类,序列化器,类视图,路由),接口测试
django drf 案例--实现url编码和json和dict格式转化小工具(涉及定义模型类,序列化器,类视图,路由),接口测试
|
XML JSON 前端开发
【Django学习笔记 - 17】:序列化和反序列化(restful接口小案例、DRF的工程搭建、序列化器与序列化、验证、保存)
【Django学习笔记 - 17】:序列化和反序列化(restful接口小案例、DRF的工程搭建、序列化器与序列化、验证、保存)
527 0
【Django学习笔记 - 17】:序列化和反序列化(restful接口小案例、DRF的工程搭建、序列化器与序列化、验证、保存)
|
XML JSON 数据格式
【愚公系列】2022年04月 Python教学课程 61-Django框架Resful接口
【愚公系列】2022年04月 Python教学课程 61-Django框架Resful接口
137 1
【愚公系列】2022年04月 Python教学课程 61-Django框架Resful接口
|
13天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
96 44