• Flask 实现增改及分页查询的完整 Demo


    Flask 实现增改及分页查询的完整 Demo

    简介

    本文将通过一个 Flask Demo 来展示如何使用 Flask 框架实现 RESTful API,包括增加、修改用户信息以及分页查询功能。我们将使用 Flask 的扩展 SQLAlchemy 来处理数据库操作。

    环境准备

    首先,确保你已安装 Flask 和 Flask-SQLAlchemy。如果尚未安装,可以通过以下命令安装:

    pip install Flask Flask-SQLAlchemy
    

    Flask 应用结构

    创建一个名为 app.py 的文件,并编写以下代码:

    # 引入 Flask 和 SQLAlchemy 相关模块
    from flask import Flask, request, jsonify, abort
    from flask_sqlalchemy import SQLAlchemy
    import os
    
    # 创建 Flask 应用实例
    app = Flask(__name__)
    
    # 配置数据库 URI 和 JSON 编码
    app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///data.db"
    app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
    app.config['JSON_AS_ASCII'] = False  # flask 2.2.5以下 允许返回非ASCII字符
    app.json.ensure_ascii = False # flask 2.3.0以上 允许返回非ASCII字符
    
    # 创建 SQLAlchemy 实例绑定到应用
    db = SQLAlchemy(app)
    
    # 定义 User 模型
    class User(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(20))
    
    # 创建数据库表
    db.create_all()
    
    # 增加用户
    @app.route("/user/add", methods=['POST'])
    def add_user():
        # 省略具体实现...
    
    # 分页查询用户
    @app.route("/users", methods=['GET'])
    def get_users():
        # 省略具体实现...
    
    # 更新用户信息
    @app.route("/user/", methods=['POST'])
    def update_user(user_id):
        # 省略具体实现...
    
    # 运行 Flask 应用
    if __name__ == "__main__":
        app.run(host="0.0.0.0", port=3200, debug=True)
    

    增加用户

    add_user 函数中,我们处理 POST 请求来增加新用户:

    @app.route("/user/add", methods=['POST'])
    def add_user():
        user_data = request.json
        name = user_data.get('name')
        if not name:
            return jsonify({"error": "缺少 'name' 参数"}), 400
        new_user = User(name=name)
        db.session.add(new_user)
        try:
            db.session.commit()
            return jsonify({"message": "新增成功"}), 201
        except Exception as e:
            db.session.rollback()
            return jsonify({"error": str(e)}), 500
    

    分页查询用户

    get_users 函数实现了用户信息的分页查询:

    @app.route("/users", methods=['GET'])
    def get_users():
        page = int(request.args.get('page', 1))
        per_page = int(request.args.get('per_page', 10))
        users = User.query.paginate(page=page, per_page=per_page, error_out=False)
        result = {
            'page': page,
            'per_page': per_page,
            'total': users.total,
            'list': [{'id': user.id, 'username': user.name} for user in users.items]
        }
        return jsonify(result)
    

    更新用户信息

    update_user 函数处理 POST 请求来更新用户信息:

    @app.route("/user/", methods=['POST'])
    def update_user(user_id):
        user_data = request.get_json()
        name = user_data.get('name')
        if not name:
            return jsonify({"error": "Missing 'name' parameter"}), 400
        user = User.query.get(user_id)
        if not user:
            return jsonify({"error": "User not found"}), 404
        user.name = name
        try:
            db.session.commit()
        except Exception as e:
            db.session.rollback()
            return jsonify({"error": str(e)}), 500
        return jsonify({"message": "User updated successfully"}), 200
    

    完整源码下载

    注意点

    1. 数据库配置:确保 SQLALCHEMY_DATABASE_URI 配置正确,它定义了数据库的位置和类型。
    2. 错误处理:在每个函数中,我们添加了错误处理逻辑,确保在发生错误时返回合适的 HTTP 状态码和错误信息。
    3. JSON 处理:通过 request.jsonjsonify 处理 JSON 数据,注意检查请求数据的有效性。
    4. 幂等性:虽然我们使用了 POST 请求来更新用户信息,但这违反了 RESTful API 的幂等性原则。在实际应用中,应考虑使用 PUT 或 PATCH 方法。
    5. 安全性:在生产环境中,确保采取适当的安全措施,如验证用户身份、防止 SQL 注入等。
    6. 编码问题:通过设置 JSON_AS_ASCIIapp.json.ensure_asciiFalse 解决中文编码问题。

    通过这个 Demo,我们展示了 Flask 应用的基本结构和如何实现 RESTful API 的增改及分页查询功能。希望这个 Demo 对你在使用 Flask 进行 Web 开发时有所帮助。

  • 相关阅读:
    我们的第一个 Qt 窗口程序
    PostgreSQL主键的添加与删除
    surging 将推出社区版微服务平台
    十四、应用监控(2)
    代码+视频基于R语言进行K折交叉验证
    CPS攻击案例(一)——基于脉冲宽度调制PWM的无人机攻击
    全内反射棱镜(TIR)的建模
    设计模式:责任链模式
    软件设计模式系列之十——组合模式
    容联七陌携手岚时科技,解决医美机构回访3大痛点
  • 原文地址:https://blog.csdn.net/No_Name_Cao_Ni_Mei/article/details/139481489