【问题标题】:How do I mimic Java Springs @PathVariable using Python Flask如何使用 Python Flask 模仿 Java Springs @PathVariable
【发布时间】:2019-04-29 14:43:33
【问题描述】:
from flask import Flask, jsonify, request
from flask_restful import Api, Resource

app = Flask(__name__)
api = Api(app)
user_dict = {}


class User(Resource):
    def __init__(self):
        user_id = 0

    def get(self):
        return jsonify(user_dict[id])

api.add_resource(User, "/user")

if __name__ == "__main__":
    app.run(debug=True)

这个想法是,当向 /user/1 发出 GET 请求时,get 方法会返回 user_dict 的键/值对。如何在 Python 中做路径变量?请假设字典不为空。

【问题讨论】:

    标签: python python-3.x flask flask-restful


    【解决方案1】:

    Flask 在 URL 路径注册中使用 <variable_name> or <converter:variable_name> placeholders

    这在 Flask-Restful Quickstart documentation 中显示的示例中使用:

    class TodoSimple(Resource):
        def get(self, todo_id):
            return {todo_id: todos[todo_id]}
    
        def put(self, todo_id):
            todos[todo_id] = request.form['data']
            return {todo_id: todos[todo_id]}
    
    api.add_resource(TodoSimple, '/<string:todo_id>')
    

    这里的&lt;string:todo_id&gt; 是一个路径变量,作为参数传递给TodoSimple.get()TodoSimple.put() 方法。

    Flask-Restful 假设您对 Flask 的模式非常熟悉,我强烈建议您至少通读 Flask Quickstart document,如果没有其他内容,我建议您也通读 tutorial

    对于您的具体示例,如果用户 ID 始终为整数,请使用:

    class User(Resource):
        def get(self, user_id):
            return jsonify(user_dict[user_id])
    
    api.add_resource(User, "/user/<int:user_id>")
    

    【讨论】:

    • 看起来 POST 需要在一个单独的类中。这与 Java Spring 有很大不同。感谢您提供文档链接。
    • @juice:是的,Flask-Resources 使用的视图类是per route。在 RESTful API 中,创建新资源使用 POST 到基本 URL,而对单个资源的访问访问基本 URL 和标识符,因此它们是单独的路由和单独的视图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    相关资源
    最近更新 更多