Django中如何优雅的在某接口对其他接口的调用
Django中如何优雅的在某接口对其他接口的调用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
网站建设公司,为您提供网站建设,网站制作,网页设计及定制网站建设服务,专注于企业网站制作,高端网页制作,对柔性防护网等多个行业拥有丰富的网站建设经验的网站建设公司。专业网站设计,网站优化推广哪家好,专业seo优化排名优化,H5建站,响应式网站。
开发中遇到的某个实际场景,在 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中如何优雅的在某接口对其他接口的调用的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!
网站名称:Django中如何优雅的在某接口对其他接口的调用
新闻来源:http://ybzwz.com/article/jjpdhh.html