簡體   English   中英

在 Flask-Restful 中使用藍圖有什么好處?

[英]What is the benefit of using Blueprint in Flask-Restful?

我是 Flask 和Blueprint概念的新手。 我了解在普通 Flask 應用程序中使用Blueprint的好處。 但是,在閱讀了許多帖子/博客/文檔之后,我仍然不清楚將Blueprint與 Flask-Restful 結合使用的好處。

讓我們考慮Flask-Restful 文檔中的兩個示例。 第一個:

from flask import Flask
from flask_restful import Api
from myapi.resources.foo import Foo
from myapi.resources.bar import Bar
from myapi.resources.baz import Baz

app = Flask(__name__)
api = Api(app)

api.add_resource(Foo, '/Foo', '/Foo/<string:id>')
api.add_resource(Bar, '/Bar', '/Bar/<string:id>')
api.add_resource(Baz, '/Baz', '/Baz/<string:id>')

我們有 3 個資源。 我們注冊它們並啟動項目。 在這一點上一切都清楚了。 我會對這種方法感到滿意。

然后,他們使用藍圖:

from flask import Flask, Blueprint
from flask_restful import Api, Resource, url_for

app = Flask(__name__)
api_bp = Blueprint('api', __name__)
api = Api(api_bp)

class TodoItem(Resource):
    def get(self, id):
        return {'task': 'Say "Hello, World!"'}

api.add_resource(TodoItem, '/todos/<int:id>')
app.register_blueprint(api_bp)

據我所知,代碼變得越來越復雜:

  • 需要更多步驟:使用藍圖創建 API 實例,向應用程序注冊藍圖,...
  • 如果我有其他資源,例如user ,我必須重復所有這些步驟(如果我錯了,請糾正我):
user_bp = Blueprint('user', __name__)
user_api = Api(user_bp)
user_api.add_resource(User, '/user/<int:id>')
app.register_blueprint(user_bp)

那么,在這里使用藍圖有什么好處呢?

Flask中的blueprint是將 Flask 應用程序構造成子集的 object。 這有助於組織代碼和分離功能。

對於Flask-RESTful ,這可用於為您的 api 創建應用程序子集。 例如,您有一個核心藍圖、一個身份驗證藍圖以及一個 api 藍圖。 當您創建 api 的新版本時,它也很有用,它破壞了與第一個版本的向后兼容性。 在這種情況下,您可以為新版本創建第二個藍圖。

您不必為您創建的每個 api 端點創建新藍圖,您可以為每個端點重用 api 藍圖,例如:

from flask import Flask, Blueprint
from flask_restful import Api, Resource, url_for

app = Flask(__name__)
core_bp = Blueprint('core', __name__)
api_bp = Blueprint('api', __name__)
api = Api(api_bp)

@core_bp.route('/')
def index():
    return 'Index'

class TodoItem(Resource):
    def get(self, id):
        return {'task': 'Say "Hello, World!"'}

api.add_resource(TodoItem, '/todos/<int:id>')
api.add_resource(User, '/user/<int:id>')

app.register_blueprint(core_bp)
app.register_blueprint(api_bp, url_prefix='/api')

像這樣,您的核心應用程序可以通過“/”訪問,api 通過“/api”訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM