使用Flask开发简单接口

简介: 作为测试人员,在工作或者学习的过程中,有时会遇到没有可以调用的现成的接口,导致我们的代码没法调试跑通的情况。这时,我们使用python中的web框架Flask就可以很方便的编写简单的接口,用于调用或调试。在之前的pytest系列文章中,已经使用过Flask编写接口用于代码调试。相比于python的另一个web框架Django,Flask编写接口要方便简单很多。那么,接下来就告诉大家如何使用Flask编写简单的接口吧。

安装Flask


安装命令:pip install flask

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

微信图片_20220425181513.png


创建项目


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

微信图片_20220425181516.png

接下来就可以在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及端口,默认为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中显示如下:

微信图片_20220425181521.png

该接口服务启动成功,接口请求地址为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).text
    print(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).text
    print(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).text
    print(res)
if __name__ == '__main__':
    # demo_login()
    # demo_get_user()
    demo_register()

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

微信图片_20220425181525.png

这里需要注意:

  1. 请求代码中,我们指定了headers = {"Content-Type": "application/json;charset=utf8"},则post请求参数的格式需要是json格式,且在接口代码中需要使用 request.json.get("username") 这种形式去获取请求中对应的值。
    微信图片_20220425181530.png
  2. 同样,如果不指定headers,则post请求参数不需要要是json格式,直接传dict格式就行,这时接口代码中需要使用 request.values.get("username") 这种形式去获取请求中对应的值。

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

微信图片_20220425181534.png


总结


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

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

相关文章
|
3月前
|
数据库 Python
如何使用Flask进行开发?
【9月更文挑战第1天】如何使用Flask进行开发?
51 3
|
4月前
|
SQL 缓存 数据库
神秘编程领域惊现宝藏!Flask 扩展生态究竟隐藏着怎样的神奇力量?快来揭开提升开发效率的秘密!
【8月更文挑战第31天】在 Flask 的世界里,其简洁而强大的核心框架搭配丰富多彩的扩展生态,为开发者带来了无尽可能性。从数据库集成到用户认证,从表单验证到缓存管理,Flask 提供了众多高质量插件,如 Flask-SQLAlchemy、Flask-WTF 和 Flask-Login,大幅提升了开发效率和代码质量。这些扩展如同宝库中的珍宝,等待着我们去探索和利用,但需谨慎选择以避免不必要的复杂性和性能问题。总之,Flask 的扩展生态助力我们更高效地开发 Web 应用,创造更多优秀作品。
35 0
|
5月前
|
JSON 数据格式 Python
Flask实现内部接口----pycharm安装及新建,location代表着文件路径,下面是Python的环境,Flask是由Python开发的框架,Python文件接口ython通过GET发送
Flask实现内部接口----pycharm安装及新建,location代表着文件路径,下面是Python的环境,Flask是由Python开发的框架,Python文件接口ython通过GET发送
|
5月前
|
API 数据库 开发者
逆袭之路!Django/Flask助你成为Web开发界的璀璨新星!
【7月更文挑战第13天】在Python Web开发中,Django和Flask各具优势。Django适合快速构建大型项目,如在线书店,其ORM和内置功能让复杂应用轻松上手。Flask则以其轻量和灵活性见长,适用于个人博客等小型应用。选择框架应根据项目需求和个人偏好,两者都能助开发者在Web开发领域大放异彩。
55 2
|
5月前
|
数据库 开发者 Python
从菜鸟到大神,Django/Flask 让你秒变 Web 开发界的‘头号玩家’!
【7月更文挑战第12天】在Python Web开发中,Django和Flask框架各具特色。Flask轻量灵活,适合快速搭建简单应用,如博客,基本代码仅需几行。Django则功能全面,适用于复杂项目,如电商网站,内置ORM和管理后台。两者都助力开发者从新手进阶。选择取决于项目需求和个人偏好。学习和实践这两个框架,能助你成为Web开发专家。
60 2
|
6月前
|
JSON 安全 API
如何高效编写API接口:以Python与Flask为例
构建RESTful API的简明教程:使用Python的Flask框架,从环境准备(安装Python,设置虚拟环境,安装Flask)到编写首个API(包括获取用户列表和单个用户信息的路由)。运行API服务器并测试在`http://127.0.0.1:5000/users`。进阶话题包括安全、数据库集成、API文档生成和性能优化。【6月更文挑战第27天】
173 7
|
5月前
|
文字识别 Java Python
文本,文识10,springBoot提供RestTemplate以调用Flask OCR接口,调用flask实现ocr接口,用paddleocr进行图片识别云服务技术,单个paddleocr接口有影响
文本,文识10,springBoot提供RestTemplate以调用Flask OCR接口,调用flask实现ocr接口,用paddleocr进行图片识别云服务技术,单个paddleocr接口有影响
|
5月前
|
文字识别 Java Python
文本,文识08图片保存()上,最方便在于整体生成代码,serivce及实体类,base64编码保存图片文件,调用flask实现内部ocr接口,通过paddleocr识别,解析结果,base64转图片
文本,文识08图片保存()上,最方便在于整体生成代码,serivce及实体类,base64编码保存图片文件,调用flask实现内部ocr接口,通过paddleocr识别,解析结果,base64转图片
|
5月前
|
JSON 文字识别 数据格式
文本,文字识别,Flask实现内部接口开发,OCR外部接口的开发,如何开发一个识别接口,通过post调用,参数是图片的路径,内部调用,直接传图片路径就行
文本,文字识别,Flask实现内部接口开发,OCR外部接口的开发,如何开发一个识别接口,通过post调用,参数是图片的路径,内部调用,直接传图片路径就行
|
5月前
|
API Python
python flask 提供web的get/post开发
python flask 提供web的get/post开发
52 0