专栏首页Python编程与实战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 对象传给之前的接口就完事了!

本文分享自微信公众号 - Python编程与实战(GoPy1024),作者:Jerryning

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 利用 Flask 动态展示 Pyecharts 图表数据的几种方法

    本文将介绍如何在 web 框架 Flask 中使用可视化工具 pyecharts, 看完本教程你将掌握几种动态展示可视化数据的方法。

    Python编程与实战
  • pyecharts可视化和微信的结合

    最近在研究 pyecharts 的用法,它是 python 的一个可视化工具,然后就想着结合微信来一起玩

    Python编程与实战
  • Python爬虫偷懒神器 — 快速构造请求头!

    我们在写爬虫构建请求的时候,不可避免地要添加请求头( headers ),一般来说,我们只要添加 user-agent 就能满足绝大部分需求了

    Python编程与实战
  • Django学习笔记之Ajax与文件上传

    AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服...

    Jetpropelledsnake21
  • 前后端分离必备的接口规范,十分接地气!

    随着互联网的高速发展,前端页面的展示、交互体验越来越灵活、炫丽,响应体验也要求越来越高,后端服务的高并发、高可用、高性能、高扩展等特性的要求也愈加苛刻,从而导致...

    Java技术栈
  • 聊聊前后端分离接口规范

    随着互联网的高速发展,前端页面的展示、交互体验越来越灵活、炫丽,响应体验也要求越来越高,后端服务的高并发、高可用、高性能、高扩展等特性的要求也愈加苛刻,从而导致...

    用户5224393
  • 聊聊前后端分离接口规范

    随着互联网的高速发展,前端页面的展示、交互体验越来越灵活、炫丽,响应体验也要求越来越高,后端服务的高并发、高可用、高性能、高扩展等特性的要求也愈加苛刻,从而导致...

    用户1516716
  • Spring Boot实现分布式微服务开发实战系列(四)

    上一篇主要讲了整个项目的子模块及第三方依赖的版本号统一管理维护,数据库对接及缓存(Redis)接入,今天我来说说过滤器配置及拦截设置、接口安全处理、AOP切面实...

    攻城狮的那点事
  • Go 语言基础--接口浅析

    go 接口是go语言程序设计中很重要的一部分,如果说Java 中一切皆对象,那么go中的接口就很像是Java中的object,Java的面向对象编程、go的面向...

    邹志全
  • 论一个好接口的自我修炼

    hello,大家好,今天我们分享一篇python开发中的一个很重要的case,那就是写接口。之前见到过一位应聘者的简历,写着接口开发3年,然后期望薪资2...

    还是牛6504957

扫码关注云+社区

领取腾讯云代金券