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

网友投稿 199 2024-02-02


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

本文主要介绍"Django中怎么优雅的在某接口对其他接口的调用",希望能够解决您遇到有关问题,下面我们一起来看这篇 "Django中怎么优雅的在某接口对其他接口的调用" 文章。

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

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

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

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

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

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

 

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

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

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

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

 

接下来我将用 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 的值

 

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

看完上述内容,你们掌握Django中如何优雅的在某接口对其他接口的调用的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

编程技术 和 程序设计

JS逆向怎么实现国航登录:本文主要介绍"JS逆向如何实现国航登录",希望能够解决您遇到有关问题,下面我们一起来看这篇 "JS逆向如何实现国航登录" 文章。 抓包下面是登录的抓包:  很明显 userName 和 passw ...


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java中的Comparable和Comparator接口
下一篇:如何理解Java编程接口
相关文章

 发表评论

暂时没有评论,来抢沙发吧~