Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Django | 如何优雅的在某接口对其他接口的调用

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

作者头像
Python编程与实战
发布于 2020-04-14 07:46:57
发布于 2020-04-14 07:46:57
3.5K00
代码可运行
举报
运行总次数:0
代码可运行

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

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

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

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

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

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

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

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> 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 属性就好了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> request._body = data
>>> data
b'"{\\"name\\": \\"jerry\\", \\"code\\": \\"Python\\"}"

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python编程与实战 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Django之视图层与模板层
视图函数(类)简称为视图,就是一个普通的函数(类),它的功能是接收web请求,并返回web响应.
GH
2019/12/16
9.2K0
django的Request-7
在定义路由规则的时候,可以使用正则表达式截取数据,然后传到视图函数中,在视图函数中使用参数接收。
py3study
2020/01/19
1.2K0
Django 获取请求参数
  我们在使用python做接口测试的时候,通常使用的是requests库。而大家都知道还有一个request东西,很多人对requests与request两个东西傻傻分不清。下面我简单来介绍一下。
全栈测试开发日记
2023/02/02
2.7K0
Django 获取请求参数
【愚公系列】2022年01月 Python教学课程 46-Django框架之HttpRequest
与python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况
愚公搬代码
2022/12/01
1K0
【愚公系列】2022年01月 Python教学课程 46-Django框架之HttpRequest
Django&DRF重点内容大盘点
本文只是将学习过程中需要深刻记忆,在工作中常用的一些命令或者知识点进行一个罗列并阐释,不会全面的将所有内容进行讲解。大家可以在了解了Django框架和DRF框架之后再来看这篇文章。否则会有点不知所云。
小闫同学啊
2019/07/18
5.9K0
django框架菜鸟教程_django框架菜鸟教程
reverse反解析 使用reverse函数,可以根据路由名称,返回具体的路径,如: from django.urls import reverse # 注意导包路径
全栈程序员站长
2022/10/05
3.1K0
Django请求和响应对象
当一个页面被请求时,Django 会创建一个 HttpRequest 对象,这个对象包含了请求的元数据。然后,Django 加载相应的视图,将 HttpRequest 作为视图函数的第一个参数。每个视图负责返回一个 HttpResponse 对象。
zy010101
2021/11/01
1.5K0
web开发框架之Django基础
# 基本查询 print(BookInfo.objects.all()) print(BookInfo.objects.get(btitle='雪山飞狐').id) print(BookInfo.objects.get(id=3)) print(BookInfo.objects.get(pk=3)) # 将ID=3的排除,显示其他的 print(BookInfo.objects.exclude(id=3)) print(111111111) try:   print(BookInfo.objects.get(id=12)) # except Exception as e:
py3study
2020/01/17
6.1K0
Django学习笔记之Django视图View
一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片。 无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你当前项目目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中。 一个简单的视图 下面是一个以HTML文
Jetpropelledsnake21
2018/07/04
1.8K0
03.Django基础三之视图函数
  一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。
changxin7
2019/09/29
5K0
03.Django基础三之视图函数
python 终极篇 --- django
一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。
py3study
2020/01/19
1.6K0
python 终极篇 --- django
Django 视图层
PyCharm可以使用virtualenv中的功能来创建虚拟环境。PyCharm紧密集成了virtualenv,所以只需要在setting中配置即可创建虚拟环境。而且PyCharm捆绑了virtualenv,我们不需要单独安装,一般创建过程如下:
py3study
2020/01/19
1.7K0
Django框架学习(一)
1、POST/PUT/DELETE/PATCH访问一个url地址的时候才可以带请求体
小闫同学啊
2019/07/18
2.2K0
Django框架学习(一)
Django之views系统
Django的View(视图)简介 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片。 无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你当前项目目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中。 一
人生不如戏
2018/04/12
2.2K0
Django之views系统
Django入门(1)
Django入门 项目创建和APP创建 准备环境 python3 virtualenv pip3 pip3 install django==1.1 项目创建,APP创建 django-admin startproject ops cd ops python3 manage.py startapp darshboard cd darshboard #进入项目路径 touch urls.py #创建路由文件 项目结构如下: ops/ |-- darshboard | |-- admin.py | |-- ap
py3study
2020/01/02
3450
Django—视图
视图负责接受Web请求HttpRequest,进行逻辑处理,返回Web响应HttpResponse给请求者。
py3study
2020/01/16
4.5K0
Django—视图
Django模板语言与视图(view)
  的命名包括任何字母数字以及下划线 ("_")的组合(不提倡数字开头)。 变量名称中
py3study
2020/01/19
3.4K0
Django模板语言与视图(view)
django基础(一)
---------修改密码-------------------------------------------------------
py3study
2020/01/02
3910
Django - - - -视图层之视图函数(views)
视图层之视图函数(views) 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你的Python目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,约定是将视图放置在项目或应用程序目录中的名为views.py的文件中。 视图函数:     一
用户1214487
2018/01/24
1.6K0
Django - - - -视图层之视图函数(views)
【Django】 Python Web 框架基础
$ sudo pip3 install django 安装 django 的最新版本
杨丝儿
2022/02/24
2.1K0
【Django】 Python Web 框架基础
相关推荐
Django之视图层与模板层
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文