Python Flask中的PluggableViews和Blueprint有什么区别?

最佳答案

我不知道比较它们是否正确,但是,

根据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蓝图只是组织大型项目的一种简便方法。他们没有给您提供可插入视图功能。

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)


然后,将这些蓝图注册到您的应用程序对象。

关于python - Python Flask中的可插入 View 和蓝图之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40943923/

10-12 16:50