如何用Flask构建一个基础的API接口?

2026-05-25 13:131阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1933个文字,预计阅读时间需要8分钟。

如何用Flask构建一个基础的API接口?

作为测试人员,在工作中或学习过程中,有时会遇到无法调用的接口,导致我们的代码无法正常运行。此时,使用Python中的Web框架Flask,可以方便地编写简单的测试代码。

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

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

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

安装Flask

安装命令:pip install flask

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

如何用Flask构建一个基础的API接口?

创建项目

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

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

编写接口代码

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

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

from flask import Flask, jsonify, request import re app = 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及端口,默认为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中显示如下:

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

调用接口

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

def demo_login(): '''请求登录接口''' headers = {"Content-Type": "application/json;charset=utf8"} url = "127.0.0.1:5000/login" data = { "username": "刘德华", "password": "123456" } res = requests.post(url=url, headers=headers, json=data).text print(res) def demo_register(): '''请求注册接口''' headers = {"Content-Type": "application/json;charset=utf8"} url = "127.0.0.1:5000/register" data = { "username": "郭富城", "password": "12345", "telephone": "18638385431" } res = requests.post(url=url, headers=headers, json=data).text print(res) def demo_get_user(): '''请求查询接口''' headers = {"Content-Type": "application/json;charset=utf8"} url = "127.0.0.1:5000/users/3" res = requests.get(url=url, headers=headers).text print(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官方文档。

本文作者:给你一页白纸 版权申明:本博客所有文章除特殊声明外,均采用BY-NC-SA 许可协议。转载请注明出处! 声援博主:如果觉得这篇文章对您有帮助,请点一下右下角的 “推荐” 图标哦,您的 “推荐” 是我写作的最大动力。您也可以点击下方的 按钮,关注博主不迷路。

本文共计1933个文字,预计阅读时间需要8分钟。

如何用Flask构建一个基础的API接口?

作为测试人员,在工作中或学习过程中,有时会遇到无法调用的接口,导致我们的代码无法正常运行。此时,使用Python中的Web框架Flask,可以方便地编写简单的测试代码。

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

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

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

安装Flask

安装命令:pip install flask

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

如何用Flask构建一个基础的API接口?

创建项目

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

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

编写接口代码

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

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

from flask import Flask, jsonify, request import re app = 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及端口,默认为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中显示如下:

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

调用接口

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

def demo_login(): '''请求登录接口''' headers = {"Content-Type": "application/json;charset=utf8"} url = "127.0.0.1:5000/login" data = { "username": "刘德华", "password": "123456" } res = requests.post(url=url, headers=headers, json=data).text print(res) def demo_register(): '''请求注册接口''' headers = {"Content-Type": "application/json;charset=utf8"} url = "127.0.0.1:5000/register" data = { "username": "郭富城", "password": "12345", "telephone": "18638385431" } res = requests.post(url=url, headers=headers, json=data).text print(res) def demo_get_user(): '''请求查询接口''' headers = {"Content-Type": "application/json;charset=utf8"} url = "127.0.0.1:5000/users/3" res = requests.get(url=url, headers=headers).text print(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官方文档。

本文作者:给你一页白纸 版权申明:本博客所有文章除特殊声明外,均采用BY-NC-SA 许可协议。转载请注明出处! 声援博主:如果觉得这篇文章对您有帮助,请点一下右下角的 “推荐” 图标哦,您的 “推荐” 是我写作的最大动力。您也可以点击下方的 按钮,关注博主不迷路。