Python Flask中PluggableViews和Blueprint之间的区别是什么?
答案 0 :(得分:1)
我不知道比较它们是否正确,但
根据Flask Documentation:
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蓝图只是组织大型项目的一种更简单的方法。他们没有为您提供Pluggable Views优惠功能。
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)
然后将这些蓝图注册到您的应用程序对象。
答案 1 :(得分:0)
就路由而言,可插入视图(又称基于类的视图)比蓝图要好得多,蓝图只是带有路由装饰器的一堆功能。
在可插入视图范例中,它通过在类中组织视图逻辑并将其子类化,从而促进代码重用代码。 URL路由是通过app.add_url_rule()
调用注册的,这很不错,因为它遵循SOLID原则中的S(关注点分开)。在Blueprints方法中,每个前端视图逻辑都封装在视图函数中,因此不太适合代码重用。