使用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
这一段代码在上一篇中已经介绍过,不同的地方是把Flask初始化放在create_app函数里面。
sasuke是一个标准的Python包(任何一个包含有__init__.py文件的文件夹都会被认定为Python包,并且会从__init__.py中执行代码进行初始化。)再看看sasuke包里面的views,views也是一个Python包,同样会读取__init__.py进行初始化,我们现在看看views里面__init__.py的代码:
?View
Code PYTHON
可以看出__init__.py只做一件事,从views包里面的admin文件中导入admin,从frontend文件中导入frontend。这样外层程序就可以通过views.frontend来访问frontend.py里面的frontend, 通过views.admin来访问admin.py里面的admin。
看看admin.py中的代码:
?View
Code PYTHON
frontend.py中的代码:
?View
Code PYTHON
可以看出admin.py与frontend.py中的代码很相似,其中有一段代码我们看到了Blueprint:
admin = Blueprint(‘admin’, __name__)
用于定义Blueprint模块,Blueprint模块可以用来定义路由,通过@admin.route(‘/’)来定义路由(URL地址),或许你还不明白这里定义了一个Blueprint对象admin除了添加路由外还有何用处,不急,下面我们来看看sasuke包中的__init__.py里的代码:
?View
Code PYTHON
重点看这里:
通过传递两个参数至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’)
看了之后可以对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() |
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 |
看看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/' |
?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 = 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’)
相关文章推荐
- flask使用Blueprint进行多模块应用的编写
- 使用Flask快速开发WEB应用
- flask使用Blueprint进行多模块应用的编写
- 使用Vue快速开发单页应用
- [置顶] OSGI企业应用开发(四)使用Blueprint整合Spring框架(一)
- 使用 CodeIgniter 框架快速开发 PHP 应用(二)
- 使用 IDEA + Maven + Git 快速开发 Web 应用
- .net企业库-数据处理模块-使用DAAB来开发应用
- 使用 IDEA + Maven + Git 快速开发 Java Web 应用
- 使用 AppFuse 快速构建 J2EE 应用---快速开发,从 AppFuse 开始
- 使用 IDEA + Maven + Git 快速开发 Web 应用
- 使用flask开发RESTful架构的api服务器端–部署flask应用到nginx
- 使用Vue快速开发单页应用
- NHibernate的基本使用、快速入门 - Microsoft.NET开发框架应用资源(zhuan)
- 使用 CodeIgniter 框架快速开发 PHP 应用(三)
- 使用 IDEA + Maven + Git 快速开发 Java Web 应用
- 使用CodeIgniter框架快速开发PHP应用(一)
- web应用开发入门-使用mac版本eclipse搭建tomcat下web应用项目详细步骤
- 使用 CodeIgniter 框架快速开发 PHP 应用(一)
- 快速构建Windows 8风格应用1-开发工具安装及模拟器使用 推荐