[英]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)
據我所知,代碼變得越來越復雜:
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.