[英]Difference between Pluggable Views and Blueprint in Python Flask
Python Flask 中的 PluggableViews 和 Blueprint 有什么區別?
我不知道比較它們是否正確,但是,
根據燒瓶文檔:
Flask 0.7 引入了受 Django 通用視圖啟發的可插入視圖,這些視圖基於類而不是函數。 主要目的是您可以替換部分實現,並通過這種方式具有可定制的可插入視圖。
在示例中,它在視圖中定義了一個get_template_name方法並在其他視圖中重新使用它。 這就是可插入視圖的用途。
from flask.views import View
class ListView(View):
def get_template_name(self):
raise NotImplementedError()
def render_template(self, context):
return render_template(self.get_template_name(), **context)
def dispatch_request(self):
context = {'objects': self.get_objects()}
return self.render_template(context)
class UserView(ListView):
def get_template_name(self):
return 'users.html'
def get_objects(self):
return User.query.all()
Flask 藍圖只是組織大型項目的一種更簡單的方法。 它們沒有為您提供可插入視圖提供的功能。
from flask import Blueprint, render_template, abort
from jinja2 import TemplateNotFound
simple_page = Blueprint('simple_page', __name__,
template_folder='templates')
@simple_page.route('/', defaults={'page': 'index'})
@simple_page.route('/<page>')
def show(page):
try:
return render_template('pages/%s.html' % page)
except TemplateNotFound:
abort(404)
然后您將這些藍圖注冊到您的應用程序對象。
就路由而言,Pluggable Views(又名基於類的視圖)比 Blueprints 優越得多,Blueprints 只是一堆帶有路由裝飾器的函數。
在 Pluggable Views 范式中,它通過在類中組織視圖邏輯並將它們子類化來促進代碼重用代碼。 URL 路由通過app.add_url_rule()
調用注冊,這很好,因為它遵循 SOLID 原則中的 S(關注點分離)。 在藍圖方法中,每個前端視圖邏輯都封裝在視圖函數中,這不太適合代碼重用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.