簡體   English   中英

Python Flask 中可插入視圖和藍圖的區別

[英]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.

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