您的位置:首页 > 产品设计 > UI/UE

使用Flask快速开发WEB应用-第二篇:Blueprint模块的应用

2013-03-31 13:31 776 查看
转自:http://www.easywu.com/?p=306

看了之后可以对Blueprint的用法和程序的框架有所了解。

一个网站根据不同的功能可能会分为多个不同的模块,如果把所有功能都写在一个文件里,后期将会很难维护。上一篇里面讲到了怎样构建一个最小的Flask应用,这一篇的内容重写了WEB应用的框架,使用Blueprint来注册不同功能的模块

这一篇里我将会把网站功能分为两个部份,frontend为一些常用信息功能,admin为管理员功能。两个功能分别写入不同的PY文件里通过Blueprint注册成为网站功能绑定URL地址。先看一下文件结构:



我用火影的名字作为文件名,哈哈 : )这完全是个人爱好。最爱的OnePiece早就被我用于公司的项目,只能拿火影来用。sasuke作为项目名,是佐助的名字@_@

现在来分析一下文件结构:

naruto文件夹包含:

文件夹:sasuke Python包(WEB应用的所有内容)。

文件:run.py管理整个WEB应用的运行。

首先来看看run.py的代码:

?View
Code PYTHON

#!/usr/bin/env python
#coding=utf-8
__author__ = 'kainwu'

#导入Flask
from flask import Flask

#导入sasuke中的create_app
from sasuke import create_app

#初始化Flask放在sasuke里面通过create_app创建
app = create_app()

def main():
#设置服务器ip
server_ip = '0.0.0.0'
#设置服务器端口
server_port = 8000
#运行Flask
app.run(host=server_ip, port=server_port, debug=True)

if __name__ == '__main__':
main()

这一段代码在上一篇中已经介绍过,不同的地方是把Flask初始化放在create_app函数里面。

sasuke是一个标准的Python包(任何一个包含有__init__.py文件的文件夹都会被认定为Python包,并且会从__init__.py中执行代码进行初始化。)再看看sasuke包里面的views,views也是一个Python包,同样会读取__init__.py进行初始化,我们现在看看views里面__init__.py的代码:

?View
Code PYTHON

#!/usr/bin/env python
#coding=utf-8
__author__ = 'kainwu'

from .frontend import frontend
from .admin import admin

可以看出__init__.py只做一件事,从views包里面的admin文件中导入admin,从frontend文件中导入frontend。这样外层程序就可以通过views.frontend来访问frontend.py里面的frontend, 通过views.admin来访问admin.py里面的admin。

看看admin.py中的代码:

?View
Code PYTHON

#!/usr/bin/env python
#coding=utf-8
__author__ = 'kainwu'

from flask import Blueprint

admin = Blueprint('admin', __name__)

@admin.route('/')
def index():
return 'admin'

@admin.route('/test/')
def test():
return 'admin/test/'

frontend.py中的代码:

?View
Code PYTHON

#!/usr/bin/env python
#coding=utf-8
__author__ = 'kainwu'

from flask import Blueprint, render_template

frontend = Blueprint('frontend', __name__)

@frontend.route('/')
def index():
return 'frontend'

@frontend.route('/test/')
def test():
return '/test/'

可以看出admin.py与frontend.py中的代码很相似,其中有一段代码我们看到了Blueprint:

admin = Blueprint(‘admin’, __name__)

用于定义Blueprint模块,Blueprint模块可以用来定义路由,通过@admin.route(‘/’)来定义路由(URL地址),或许你还不明白这里定义了一个Blueprint对象admin除了添加路由外还有何用处,不急,下面我们来看看sasuke包中的__init__.py里的代码:

?View
Code PYTHON

#!/usr/bin/env python
#coding=utf-8
__author__ = 'kainwu'

from flask import Flask
from views import frontend, admin

DEFAULT_APP_NAME = 'NARUTO'

DEFAULT_MODULES = (
(frontend, ''),
(admin, '/admin'),
)

def create_app():
""" 创建、初始化app """
app = Flask(DEFAULT_APP_NAME)
# 使用flask中的Blueprint设置站点模块
setting_modules(app, DEFAULT_MODULES)
return app

def setting_modules(app, modules):
""" 注册Blueprint模块 """
for module, url_prefix in modules:
# 通过register_blueprint注册
app.register_blueprint(module, url_prefix = url_prefix)

重点看这里:
for module, url_prefix in modules:
app.register_blueprint(module, url_prefix = url_prefix)


通过传递两个参数至register_blueprint方法注册Blueprint。根据传递过来的参数module是admin与frontend,而admin与frontend是已经定义好的Blueprint对象。url_prefix为绑定的url路径,看到这里是不是赫然开朗起来了?

举个例子,如果你需要另外加一个模块用于管理商店,那么可以通过以下几个步骤添加:

1、在views包里面新建一个shop.py,定义一个Blueprint的对象shop

2、导入到__init__.py里面。

3、在sasuke包的__init__.py中导入shop

4、DEFAULT_MODULES中添加(shop, ‘/shop’)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: