flask 中的蓝图 blueprint 的理解

来源:互联网 发布:归属地查询软件 编辑:程序博客网 时间:2024/06/02 12:45
  • 好处一:
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;"> adminapp </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>

                                             
0 0