flask 中的蓝图 blueprint 的理解

本文介绍 Flask 中 Blueprint 的使用方法及其带来的两大好处:一是帮助解决多模块间的依赖问题,实现应用的模块化;二是方便扩展插拔,并提供命名空间隔离。
  • 好处一:
Blueprint 其实这是录制其上的动作,比如注册 view,然后“挂载”到 app 上。它的目的只是便于组织多模块的平行共存,避免直接在 app 上注册 view 导致 view 模块和 app 模块相互 import 的问题。
  • 好处二:

另外一个顺带出来的好处,是对于 Flask Extension 开发者而言,blueprint 便于在 app 上插拔。而且 url_for 等等具有隔离命名空间的效果。

正常的组织形式如下:

首先是注册一个形式上的view,得到一个蓝图对象:

admin_views.py

<pre name="code" class="lang-py prettyprint prettyprinted" style="margin-top:0px; margin-bottom:1em; padding:5px; border:0px; font-size:13px; overflow:auto; width:auto; max-height:600px; font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif; color:rgb(57,51,24); word-wrap:normal; background-color:rgb(238,238,238)"><code style="margin:0px; padding:0px; border:0px; font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif; white-space:inherit"><span class="kwd" style="color:#008b;margin:0px; padding:0px; border:0px;">from</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;"> flask </span><span class="kwd" style="color:#008b;margin:0px; padding:0px; border:0px;">import</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;"> </span><span class="typ" style="color:#2b91af;margin:0px; padding:0px; border:0px;">Blueprint</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;">
admin </span><span class="pun" style="color:#000000;margin:0px; padding:0px; border:0px;">=</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;"> </span><span class="typ" style="color:#2b91af;margin:0px; padding:0px; border:0px;">Blueprint</span><span class="pun" style="color:#000000;margin:0px; padding:0px; border:0px;">(</span><span class="str" style="color:#8000;margin:0px; padding:0px; border:0px;">'admin'</span><span class="pun" style="color:#000000;margin:0px; padding:0px; border:0px;">,</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;"> __name__</span><span class="pun" style="color:#000000;margin:0px; padding:0px; border:0px;">)</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;">

</span><span class="lit" style="color:#8000;margin:0px; padding:0px; border:0px;">@admin</span><span class="pun" style="color:#000000;margin:0px; padding:0px; border:0px;">.</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;">route</span><span class="pun" style="color:#000000;margin:0px; padding:0px; border:0px;">(</span><span class="str" style="color:#8000;margin:0px; padding:0px; border:0px;">'/'</span><span class="pun" style="color:#000000;margin:0px; padding:0px; border:0px;">)</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;">
</span><span class="kwd" style="color:#008b;margin:0px; padding:0px; border:0px;">def</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;"> index</span><span class="pun" style="color:#000000;margin:0px; padding:0px; border:0px;">():</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;">
    </span><span class="kwd" style="color:#008b;margin:0px; padding:0px; border:0px;">pass</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;">

</span><span class="lit" style="color:#8000;margin:0px; padding:0px; border:0px;">@admin</span><span class="pun" style="color:#000000;margin:0px; padding:0px; border:0px;">.</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;">route</span><span class="pun" style="color:#000000;margin:0px; padding:0px; border:0px;">(</span><span class="str" style="color:#8000;margin:0px; padding:0px; border:0px;">'/logout'</span><span class="pun" style="color:#000000;margin:0px; padding:0px; border:0px;">)</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;">
</span><span class="kwd" style="color:#008b;margin:0px; padding:0px; border:0px;">def</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;"> logout</span><span class="pun" style="color:#000000;margin:0px; padding:0px; border:0px;">():</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;">
    </span><span class="kwd" style="color:#008b;margin:0px; padding:0px; border:0px;">pass</span></code>


将该蓝图对象挂载(注册)到app下面:

application.py

<pre name="code" class="lang-py prettyprint prettyprinted" style="margin-top:0px; margin-bottom:1em; padding:5px; border:0px; font-size:13px; overflow:auto; width:auto; max-height:600px; font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif; color:rgb(57,51,24); word-wrap:normal; background-color:rgb(238,238,238)"><code style="margin:0px; padding:0px; border:0px; font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,sans-serif; white-space:inherit"><span class="kwd" style="color:#008b;margin:0px; padding:0px; border:0px;">from</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;"> flask </span><span class="kwd" style="color:#008b;margin:0px; padding:0px; border:0px;">import</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;"> </span><span class="typ" style="color:#2b91af;margin:0px; padding:0px; border:0px;">Flask</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;">
</span><span class="kwd" style="color:#008b;margin:0px; padding:0px; border:0px;">from</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;"> admin_views </span><span class="kwd" style="color:#008b;margin:0px; padding:0px; border:0px;">import</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;"> admin

app </span><span class="pun" style="color:#000000;margin:0px; padding:0px; border:0px;">=</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;"> </span><span class="typ" style="color:#2b91af;margin:0px; padding:0px; border:0px;">Flask</span><span class="pun" style="color:#000000;margin:0px; padding:0px; border:0px;">(</span><span class="str" style="color:#8000;margin:0px; padding:0px; border:0px;">'my_application'</span><span class="pun" style="color:#000000;margin:0px; padding:0px; border:0px;">)</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;">
app</span><span class="pun" style="color:#000000;margin:0px; padding:0px; border:0px;">.</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;">register_blueprint</span><span class="pun" style="color:#000000;margin:0px; padding:0px; border:0px;">(</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;">admin</span><span class="pun" style="color:#000000;margin:0px; padding:0px; border:0px;">,</span><span class="pln" style="color:#000000;margin:0px; padding:0px; border:0px;"> url_prefix</span><span class="pun" style="color:#000000;margin:0px; padding:0px; border:0px;">=</span><span class="str" style="color:#8000;margin:0px; padding:0px; border:0px;">'/admin'</span><span class="pun" style="color:#000000;margin:0px; padding:0px; border:0px;">)</span></code>



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值