是该考虑将项目分解的时候了,这个时候会用到蓝图。
Flask 用 蓝图(blueprints) 的概念来在一个应用中或跨应用制作应用组件和支持通用的模式。蓝图很好地简化了大型应用工作的方式,并提供给 Flask 扩展在应用上注册操作的核心方法。一个 Blueprint 对象与 Flask 应用对象的工作方式很像,但它确实不是一个应用,而是一个描述如何构建或扩展应用的 蓝图 。
蓝图在组织flask代码时,有两种形式
分区式架构,适用于子模块有特殊需要的情况,在创建蓝图构造Blueprint对象时,可以指定static和templates, 其结构类似于下面这样
其实网上的抄来抄去的,未必自己都很明白,我个人的看法是功能式架构适合强耦合的,是一个系统各个功能模块比较紧凑、依赖比较深,且需要采用统一的格调布局。分布式架构适合松耦合的场景,比如前后台和api管理。
这次我打算要做的事情是实现一个admin后台管理系统、一个home前端信息系统和一个restfull api服务管理,理论上将应该用三个工程更为合适一些。
/admin/__init__.py,创建一个蓝图对象
from flask import Blueprint
admin_blue = Blueprint('admin', __name__, url_prefix='/admin')
from . import views
/admin/views.py,创建蓝图内的路由
# admin 模块
from admin import admin_blue
@admin_blue.route('/register')
def register():
return 'admin register'
@admin_blue.route('/login')
def login():
return 'admin login'
@admin_blue.route('/modify_password')
def modify_password():
return 'admin modify_password'
@admin_blue.route('/')
def index():
return 'admin index'
/home/__init__.py,创建一个蓝图对象
from flask import Blueprint
home_blue = Blueprint('home', __name__, url_prefix='/home')
from . import views
/home/views.py,创建蓝图内的路由
# home模块
from home import home_blue
@home_blue.route('/register')
def register():
return 'home register'
@home_blue.route('/login')
def login():
return 'home login'
@home_blue.route('/modify_password')
def modify_password():
return 'home modify_password'
@home_blue.route('/')
def index():
return 'home index'
/api/__init__.py,创建一个蓝图对象
from flask import Blueprint
api_blue = Blueprint('api', __name__, url_prefix='/api')
from . import views
/api/views.py,创建蓝图内的路由
# api模块
from api import api_blue
@api_blue.route('/getuser')
def getuser():
return 'getuser'
@api_blue.route('/getorgination')
def getorgination():
return 'getorgination'
app.py,注册蓝图
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world(): # put application's code here
return 'Hello World!'
from admin import admin_blue
from home import home_blue
from api import api_blue
app.register_blueprint(admin_blue)
app.register_blueprint(home_blue)
app.register_blueprint(api_blue)
if __name__ == '__main__':
app.run()
本文分享自 python与大数据分析 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!