1、为使项目结构模块化,更加清晰,把相同模块的视图函数放在同一个蓝图中,同一个文件中
2、创建蓝图
1、新建一个py文件目录,文件名:blueprints
新建py文件(user.py等),放置相同模块的视图函数,
user.py:
from flask import Blueprint
user_bp = Blueprint('user',name)
@user_bp.route('/login',methods=['GET','POST'])
def login():
pass
2、主app文件注册蓝图
app.regist_blueprint(蓝图的名称)
如: app.register_blueprint(user_bp)
注意:
要想在url上也显示出是在同一个模块中,加上一个参数:
url_prefix
如:user_bp = Blueprint('user',name,url_prefix='/user')
这样的话,user下面的登录,注册等视图函数的url就成了
127.0.0.1:5000/user/login
127.0.0.1:5000/user/regist
3、蓝图中模板文件查找
user_bp = Blueprint('user',name,url_prefix='/user',template_folder='usertemp')
template_folder模板文件存放的文件夹(自定义的),相对于当前py文件所在的目录下。没定义的话,默认原项目中的templates文件夹中寻找
顺序是:先项目中默认的template,然后再到自定的模板文件夹中寻找
4、蓝图中静态文件查找
user_bp = Blueprint('user',name,url_prefix='/user',template_folder='usertemp',static_folder='userstatic')
如果想在模板文件中引用蓝图中的静态文件,蓝图名称.static
<link rel="stylesheet" href="{{ url_for('user.static',filename='css/login_regist.css') }}">
不加蓝图名称的话,默认加载原项目中static文件中的静态文件
5、url_for反转
1、要指定蓝图的名称
user_bp = Blueprint('user',name,url_prefix='/user',template_folder='usertemp',static_folder='userstatic')
<ul class="nav navbar-nav navbar-right">
{% if user %}
<li><a href="#">{{ user.username }}</a></li>
<li><a href="{{ url_for('user.logout') }}">注销</a></li>
{% else %}
<li><a href="{{ url_for('user.login') }}">登录</a></li>
<li><a href="{{ url_for('user.regist') }}">注册</a></li>
{% endif %}
注意:即使在同一个蓝图中反转,也要指定
return redirect(url_for('user.login'))