首页 论坛 置顶 初学者的Python:第二章 – 使用Flask构建您的第一个REST API

正在查看 1 个帖子:1-1 (共 1 个帖子)
  • 作者
    帖子
  • #14621

    今天,我们要提升技能,构建一些真实的东西——你自己的第一个使用Flask的REST API。到最后,你将拥有一个在你电脑上运行的实际后端服务。让我们开始吧!

    什么是REST API?🤔

    把REST API想象成一个餐厅里的服务员

    • 客户端(比如你的React应用)是饥饿的顾客,他们下订单(发送请求)
    • 你的API接收这些订单,前往厨房(你的数据库/业务逻辑),然后带着食物(数据)回来

    这只是不同应用程序通过互联网相互通信的一种方式。没什么可怕的!

    为什么选择Flask?💡

    Flask是Python的轻量级Web框架,它不会强迫你使用复杂的模式。它是:

    • 极简主义:没有你不需要的臃肿功能
    • 灵活:完全可以根据你的需求构建
    • 适合初学者:从小开始,逐步扩展

    此外,像Netflix、LinkedIn和Uber这样的公司也在使用Flask来提供他们的一些服务。你选择的框架很不错!

    设置您的环境 🛠️

    首先,让我们为我们的项目创建一个专用空间:

    # 创建项目文件夹
    mkdir flask_api_project
    cd flask_api_project
    
    # 创建并激活虚拟环境
    python -m venv venv
    
    # 在 Windows 上
    venvScriptsactivate
    
    # 在 macOS/Linux 上
    source venv/bin/activate
    
    # 安装 Flask
    pip install flask
    
    

    你的第一个 Flask API 🎉

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

    from flask import Flask, jsonify
    
    # 初始化 Flask 应用
    app = Flask(__name__)
    
    # 示例数据 - 想象这就是你的数据库
    books = [
    

    {id: 1, title: Python速成课程, author: 埃里克·马修斯},
    {id: 2, title: 自动化无聊的工作, author: 阿尔·斯威加特},

    
    {
      "id": 3,
      "title": "Fluent Python",
      "author": "Luciano Ramalho"
    }
    

    ]

    # 根路由
    @app.route(‘/’)
    def hello():
    return jsonify({
    “message”: “欢迎使用我们的书店API!”
    })

    # 获取所有书籍

    
    @app.route('/api/books', methods=['GET'])
    def get_books():
    return jsonify({"books": books})

    # 获取特定书籍
    @app.route(‘/api/books/’, methods=[‘GET’])
    def get_book(book_id):

    
    book = next((book for book in books if book["id"] == book_id), None)
    if book:
    return jsonify({"book": book})
    return jsonify({"message": "未找到书籍"}), 404

    # 运行服务器
    if __name__ == __main__:

    
    

    html
    app.run(debug=True)

    
    

    让我们来分析一下发生了什么:

    • 我们导入 Flask 并创建我们的应用
    • 我们定义了一些示例数据(在实际应用中,这些数据将来自数据库)
    • 我们创建了三个“路由”(端点):
    • / → 返回欢迎信息
    • /api/books → 返回所有书籍
    • /api/books/<id> → 根据 ID 返回特定书籍

     

    运行您的 API 🏃‍♀️

    在您的终端中:

    python app.py
    

    你应该会看到类似以下内容:

     * 正在运行于 http://127.0.0.1:5000/ (按 CTRL+C 退出)
     * 正在使用 stat 重启
     * 调试器已激活!
    

    恭喜!您的 API 正在运行!🎉 您做到了!

    测试您的 API 端点 🧪

    打开您的浏览器并访问:

    或者使用像 Postman 这样的工具进行更高级的测试。

    使其互动:POST、PUT、DELETE 🔄

    让我们升级我们的 API,以允许创建、更新和删除书籍。更新您的 app.py

    
    from flask import Flask, jsonify, request
    
    # 初始化 Flask 应用
    app = Flask(__name__)
    
    # 示例数据
    books = [
        {"id": 1, "title": "Python Crash Course", "author": "Eric Matthes"},
    
    
    [
        {
            "id": 2,
            "title": "自动化无聊的事情",
            "author": "阿尔·斯威加特"
        },
        {
            "id": 3,
            "title": "流利的Python",
            "author": "卢西亚诺·拉马尔霍"
        }
    ]
    

    # 根路由
    @app.route(‘/’)

    
    

    python
    def hello():
    return jsonify({message: 欢迎使用我们的书店API!})

    # 获取所有书籍
    @app.route(/api/books, methods=[GET])
    def get_books():
    return jsonify({books: books})

    # 获取特定书籍

    python
    @app.route(‘/api/books/’, methods=[‘GET’])
    def get_book(book_id):
    book = next((book for book in books if book[“id”] == book_id), None)
    if book:
    return jsonify({“book”: book})
    这段代码定义了一个API路由,用于获取特定书籍的信息。通过`@app.route`装饰器,指定了路由的路径和允许的HTTP方法。在`get_book`函数中,使用`next`函数从书籍列表中查找与给定`book_id`匹配的书籍。如果找到了对应的书籍,则返回该书籍的JSON格式数据。

    
    return jsonify({"message": "未找到书籍"}), 404
    
    # 创建一本新书
    @app.route('/api/books', methods=['POST'])
    def add_book():
        if not request.json or not 'title' in request.json or not 'author' in request.json:
    
    
    return jsonify({"message": "请提供标题和作者"}), 400
    
        # 查找现有的最高 ID 并加 1
        new_id = max(book["id"] for book in books) + 1
    
        new_book = {
            "id": new_id,
            "title": request.json["title"],
    

    作者: 请求.json[作者]
    }
    书籍.追加(新书)
    返回 jsonify({书籍: 新书}), 201

    # 更新一本书
    @app.route(/api/books/<int:book_id>, 方法=[PUT])
    定义 更新书籍(书籍_id):

    book = next((book for book in books if book[id] == book_id), None)
    if not book:
    return jsonify({message: 未找到书籍}), 404

    
    book["title"] = request.json.get("title", book["title"])
    book["author"] = request.json.get("author", book["author"])
    return jsonify({"book": book})
    
    # 删除一本书
    
    
    @app.route('/api/books/', methods=['DELETE'])
    def delete_book(book_id):
        global books
        book = next((book for book in books if book["id"] == book_id), None)
        if not book:
    
    
    return jsonify({"message": "未找到书籍"}), 404
    
        books = [book for book in books if book["id"] != book_id]
        return jsonify({"message": "书籍已删除"})
    
    # 运行服务器
    if __name__ == '__main__':
    
    
    app.run(debug=True)
    

    现在您的 API 可以:

    • GET /api/books → 读取所有书籍
    • GET /api/books/1 → 读取特定书籍
    • POST /api/books → 创建新书籍
    • PUT /api/books/1 → 更新书籍
    • DELETE /api/books/1 → 删除书籍

    这完成了大多数 API 所需的 CRUD 操作(创建、读取、更新、删除)!

    测试新端点 🧪

    对于POST、PUT和DELETE请求,您需要使用像 Postmancurl 这样的工具。

    使用curl的POST请求示例:

    curl -X POST http://localhost:5000/api/books 
      -H "Content-Type: application/json" 
      -d '{"title": "Learn Python the Hard Way", "author": "Zed Shaw"}'
    

    让你的API准备好投入生产 🚦

     

    在实际场景中,你可能想要:

    • 连接数据库:用像SQLite、PostgreSQL或MongoDB这样的合适数据库替换我们的列表。
    • 添加认证:实现JWT令牌或API密钥。
    • 结构化你的代码:拆分成模块化文件(路由、模型等)。
    • 添加验证:确保数据格式正确。
    • 添加错误处理:提供更强大的错误信息。
    • 部署:在Heroku、AWS或DigitalOcean等平台上托管。

    下一步 🚀

    准备好提升技能了吗?尝试这些挑战:

    • 添加搜索功能:按标题或作者过滤书籍。
    • 添加分页:一次只返回10本书。
    • 添加评论:为书籍评论创建嵌套资源。
    • 连接数据库:使用Flask-SQLAlchemy从列表切换到SQLite。

     

    结论 🎯

     

    你做到了!你用Flask构建了你的第一个REST API。曾经看似复杂的后端魔法,现在是你理解并能自己构建的东西!

    记住,这只是一个开始。RESTful API 是现代 web 应用程序的支柱,而你刚刚迈出了进入这个世界的第一步。继续实验,继续构建,最重要的是,享受这个过程

    ——

    来QPY+学AI课程:https://www.qpython.com.cn/ai-courses/

正在查看 1 个帖子:1-1 (共 1 个帖子)
  • 哎呀,回复话题必需登录。