使用Flask开发简单接口

作为测试人员,在工作或者学习的过程中,有时会遇到没有可以调用的现成的接口,导致我们的代码没法调试跑通的情况。

这时,我们使用python中的web框架Flask就可以很方便的编写简单的接口,用于调用或调试。在之前的pytest系列文章中,已经使用过Flask编写接口用于代码调试。相比于python的另一个web框架Django,Flask编写接口要方便简单很多。

那么,接下来就告诉大家如何使用Flask编写简单的接口吧。

安装Flask

安装命令:pip install flask

验证是否安装成功或查看版本命令:pip show flask

创建项目

创建文件夹-->Pycharm打开即可,或者直接在Pycharm中新建项目。例如,在桌面新建demo文件夹,Pycharm打开,示例如下:

接下来就可以在demo项目中新建模块编写代码了。

编写接口代码

这里示例编写get、post两种方式的接口,用于模拟请求调用。

项目中新建模块demo_app.py,编写代码如下:

from flask import Flask, jsonify, request
import reapp = Flask(__name__)# 使通过jsonify返回的中文显示正常,否则显示为ASCII码
app.config["JSON_AS_ASCII"] = False# 因为是简单模拟,所以数据就以下面字典形式存储,而不是存储在数据库
user_data = [{"id": 1, "username": "刘德华", "password": "123456", "telephone": "13838395588"},{"id": 2, "username": "梅艳芳", "password": "666666", "telephone": "13843895511"},{"id": 3, "username": "陈百强", "password": "888888", "telephone": "13853895510"}
]@app.route("/users", methods=["GET"])
def get_all_users():"""查询所有用户信息:return:"""return jsonify({"code": 1000, "data": user_data, "msg": "查询成功"})@app.route("/users/<int:user_id>", methods=["GET"])
def get_user(user_id):"""查询某个用户信息:param user_id: 用户id:return:"""if user_id > 0 and user_id <= len(user_data):return jsonify({"code": 1000, "data": user_data[user_id - 1], "msg": "查询成功"})return jsonify({"code": 1000, "msg": "用户不存在"})@app.route("/register", methods=['POST'])
def user_register():"""注册用户:return:"""# request.json.get("username")即从发送的json格式的请求参数中获取username的值username = request.json.get("username").strip() # 用户名password = request.json.get("password").strip() # 密码telephone = request.json.get("telephone", "").strip() # 手机号,默认为空串if username and password and telephone:if username in ("刘德华", "梅艳芳", "张学友"):return jsonify({"code": 2001, "msg": "用户名已存在!"})elif not (len(telephone) == 11 and re.match("^1[3,5,7,8]\d{9}$", telephone)):return jsonify({"code": 4001, "msg": "手机号格式不正确!"})else:return jsonify({"code": 1000, "msg": "注册成功!"})else:return jsonify({"code": 2001, "msg": "用户名/密码/手机号不能为空,请检查!"})@app.route("/login", methods=['POST'])
def user_login():"""登录:return:"""username = request.json.get("username")password = request.json.get("password")if username and password:if username == "刘德华" and password == "123456":return jsonify({"code": 1000, "msg": "登录成功!", "token": "sh34ljjl08s32730dj"})return jsonify({"code": 4001, "msg": "用户名或密码错误!"})else:return jsonify({"code": 2001, "msg": "用户名或密码不能为空!"})if __name__ == '__main__':app.run(debug=True)

代码说明如下:

  • 以上代码包含4个接口,其中,查询所有用户、查询单个用户接口为GET请求,注册、登录接口为POST请求。

  • 只是编写简单的模拟接口,所以无需跟数据库有交互,数据可以直接放在代码中以字典或其他格式存储。

  • 返回的数据不能为dict形式,需要序列化为json格式,序列化可以使用json.dumps(),也可以使用flask模块中自带的jsonify

  • @app.route()中指定了接口的路径及请求方式,如@app.route("/login", methods=['POST']),路劲为/login,请求方式为post。

  • app.run()中可不指定服务运行的host及端口,默认为http://127.0.0.1:5000/,此时服务不能被同一局域网的其他机器访问。

  • 指定host为0.0.0.0,如app.run(host="0.0.0.0", port=8888),端口不做要求,不被占用就行,这样服务就可以被同一局域网的其他机器访问了。

  • app.run()debug=True的作用是启用Flask项目的调式模式 (修改代码后只需ctrl+s保存即可更新服务),否则每次修改代码之后都需要重新启动服务 (即重新运行代码) 才能生效。

运行模块后,Pycharm中显示如下:

该接口服务启动成功,接口请求地址为http://127.0.0.1:5000/,且已经开启了调试模式,接下来就可以去请求这些接口了。

调用接口

我们可以使用postman或者其他工具请求以上接口,这里使用python代码调用上面的接口,示例代码如下:

def demo_login():'''请求登录接口'''headers = {"Content-Type": "application/json;charset=utf8"}url = "http://127.0.0.1:5000/login"data = {"username": "刘德华","password": "123456"}res = requests.post(url=url, headers=headers, json=data).textprint(res)def demo_register():'''请求注册接口'''headers = {"Content-Type": "application/json;charset=utf8"}url = "http://127.0.0.1:5000/register"data = {"username": "郭富城","password": "12345","telephone": "18638385431"}res = requests.post(url=url, headers=headers, json=data).textprint(res)def demo_get_user():'''请求查询接口'''headers = {"Content-Type": "application/json;charset=utf8"}url = "http://127.0.0.1:5000/users/3"res = requests.get(url=url, headers=headers).textprint(res)if __name__ == '__main__':# demo_login()# demo_get_user()demo_register()

执行demo_register()请求注册接口,结果如下:

这里需要注意:

  1. 请求代码中,我们指定了headers = {"Content-Type": "application/json;charset=utf8"},则post请求参数的格式需要是json格式,且在接口代码中需要使用 request.json.get("username") 这种形式去获取请求中对应的值。

  2. 同样,如果不指定headers,则post请求参数不需要要是json格式,直接传dict格式就行,这时接口代码中需要使用 request.values.get("username") 这种形式去获取请求中对应的值。

发送请求后,服务端会显示收到的请求,如下所示:

总结

后续如果遇到需要使用接口调试而又没有现成的接口,那么我们就可以按照上面的思路及说明,使用Flask编写简单的接口用于请求调用或者mock。

当然,代码中的一些细节并没有做更细致的说明,感兴趣的同学可以去查看Flask官方文档。

使用Flask开发简单接口相关推荐

  1. flask接口mysql开发例子,使用Flask开发简单接口3–引入MySQL

    在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 在前两篇文章中,我们学习了通过Flask开发GET和POST请求接口,但是尚未实现操作数据库,因此,今天的目的是学习 ...

  2. Python Flask开发简单http api接口 示例

    相比Django,使用python中的web框架Flask可以很方便的编写简单的接口,用于调用或调试. 通过pycharm新建一个Flask项目 运行项目之后,浏览器打开输入下列网址 更多实例 GET ...

  3. 使用Django开发简单接口:文章增删改查

    目录 1.一些准备工作 安装django 创建django项目 创建博客应用(app) 2.models.py 3.django admin 登录 创建超级用户 4.修改urls.py 5.新增文章接 ...

  4. python接口自动化测试框架实战从设计到开发_Python接口自动化测试框架实战 从设计到开发...

    第1章 课程介绍(不要错过) 本章主要讲解课程的详细安排.课程学习要求.课程面向用户等,让大家很直观的对课程有整体认知! 第2章 接口测试工具Fiddler的运用 本章重点讲解如何抓app\web的h ...

  5. Python Flask框架-开发简单博客-认证蓝图

    作者:Eason_LYC 悲观者预言失败,十言九中. 乐观者创造奇迹,一次即可. 一个人的价值,在于他所拥有的.可以不学无术,但不能一无所有! 技术领域:WEB安全.网络攻防 关注WEB安全.网络攻防 ...

  6. Python——使用Flask框架封装接口

    Python--使用Flask框架封装接口 引言 Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活.轻便.安全且容易上手.它可以很好地结合MVC模式进行开发,开发 ...

  7. 后端入门之Python实现一个简单接口编写

    最近好像要转向后端了,故想提前学习下,实现一个简单接口编写,熟悉一下编写接口的流程和框架.写这个主要是记录一下自己的学习过程,以便后面温习.在Python实现一个简单接口编写之前需要了解一些后端开发的 ...

  8. python一般用来开发什么-python主要用来做什么?Python开发简单吗?

    python主要用来做什么?Python开发简单吗?Python技术可做web开发.Python技术可做数据分析.Python技术可做人工智能.将Python用于机器学习,流行的Python机器学习库 ...

  9. Facebook最新Libra币开发指南---接口服务器开发2

    Facebook最新Libra币开发指南---接口服务器开发2 2019年06月24日 16:23:16 最老程序员闫涛 阅读数 1145 在上一篇博文中,我们已经使用Rust语言开发了一款简单的We ...

最新文章

  1. solr java score_Solr 按照得分score跟指定字段相乘排序
  2. ggplot2:9绘图需要的数据整理技术-数据转换
  3. Vector反向迭代器使用
  4. 好看的极简网站导航源码自适应静态页
  5. 乘法更新规则对于并发的非负矩阵分解和最大间隔分类
  6. [linux驱动]proc学习笔记(一)
  7. java 获取jboss路径_java中获取文件路径的几种方式
  8. win7动态壁纸_电脑桌面美化,高清动态壁纸
  9. (github精选)优秀的openSCAD项目image2surface
  10. 检测和语义分割_分割和对象检测-第4部分
  11. php 循环删除文件,php循环删除目录及目录下的文件
  12. 三级数据库知识点总结
  13. java static 详解
  14. Android封装一个自定义标题栏
  15. 一文搞懂Spring,堪称Spring源码终结者
  16. Knowledge Distillation: A Survey
  17. Unity2019刷地形教程
  18. 高德坐标与谷歌坐标互相转换
  19. 学计算机多大显卡够用,4GB显存过气、买新显卡非8GB不选?2分钟搞懂多大显存适合你...
  20. win2012 磁盘阵列 介绍和实操

热门文章

  1. c语言实现一个函数判断year是不是润年
  2. 办公电脑监控软件哪款好用?有没有免费的?
  3. Python库资源大全【收藏】
  4. js触摸(touch)事件
  5. 辨音识键奏乐系统(K 题)--2023 年全国大学生电子设计竞赛试题
  6. 论文笔记 -- Learning Representations for Time Series Clustering
  7. 巴塞尔委员会:加密产业的增长可能对银行和金融稳定性产生威胁
  8. PHP带头大哥学习的三部曲!
  9. 图形学基础笔记I:直线和圆的光栅算法、中点线算法、中点圆算法
  10. Asp.Net+Ajax实现的宝宝RSS阅读器源码下载