(备注:本篇和接下来大部分篇内容都是功能型文章,相对于理论性讲解会放在最后返回来一一讲解。)
当我们想除了入口文件之外的文件也能注册路由的时候,flask提供的蓝图就显得很重要了。
新建一个文件为testone
start.py:
#导入Flask
from flask import Flask
#实例化Flask
app = Flask(__name__)
from testone import testone
#app给蓝图注册路由
app.register_blueprint(testone)
#自定义返回信息
@app.route('/')
def index():
return 'This is app'
#让Flask跑起来
app.run(debug=True)
testone.py:
from flask import Blueprint
#注册蓝图
testone = Blueprint('testone', __name__)
@testone.route('/one')
def one():
return 'This is testone'
此时进行访问:
通常网页会展示给用户使用,和一个给管理员的管理后台,在蓝图的基础上就构建分为管理员和用户的视图函数模块。
start.py
#导入Flask
from flask import Flask
#实例化Flask
app = Flask(__name__)
from app.admin.views import admin
from app.user.views import user
#app给蓝图注册路由
app.register_blueprint(admin)
app.register_blueprint(user)
#自定义返回信息
@app.route('/')
def index():
return 'This is app'
#让Flask跑起来
app.run(debug=True)
admin/views.py
from flask import Blueprint
#注册时候前缀,之后本文件的每一个路由都有
admin = Blueprint('admin',__name__,url_prefix='/admin')
@admin.route('/')
def index():
return 'This is admin'
user/views.py
from flask import Blueprint
#注册时候前缀,之后本文件的每一个路由都有
user = Blueprint('user',__name__,url_prefix='/user')
@user.route('/')
def index():
return 'This is user'
结果:
在规模越来越大的项目中,可能会出现分版本问题,这时候仅仅分管理员和用户就显得臃肿,蓝图需要再进行一次。
首先,我们要自己写一个小蓝图(作用是为了添加到后缀并且实现基本路由功能,然后再注册到蓝图上)
app/init.py(这个涉及比较底层一点的路由注册过程,把蓝图注册涉及的部分抽出来分部实现)
#定义一个小蓝图
class blueprint:
#初始化
def __init__(self,name):
self.name = name
self.mound = []
def route(self,rule,**options):
def decorator(f):
self.mound.append((f,rule,options))
return f
return decorator
#注册到蓝图中
def register(self,bp,url_prefix=None):
if url_prefix is None:
url_prefix='/'+self.name
for f,rule,options in self.mound:
endpoint = self.name+'+'+options.pop("endpoint", f.__name__)
bp.add_url_rule(url_prefix+rule,endpoint,f,**options)
接下来修改其他部分
admin/views.py
from app import blueprint
#注册时候前缀,之后本文件的每一个路由都有
admin = blueprint('admin')
@admin.route('/')
def index():
return 'This is admin'
user/views.py
from app import blueprint
#注册时候前缀,之后本文件的每一个路由都有
user = blueprint('user')
@user.route('/')
def index():
return 'This is user'
#导入Flask
from flask import Flask
#实例化Flask
app = Flask(__name__)
from app.v1 import create_views
views = create_views()
#app给蓝图注册路由
app.register_blueprint(views)
#自定义返回信息
@app.route('/')
def index():
return 'This is app'
#让Flask跑起来
app.run(debug=True)
当你不想只是用一个view.py 文件的时候,可以在admin或者user下面新建py文件,注册小蓝图,然后在app/init.py蓝图再注册即可