flask框架(十一): 蓝图

蓝图用于为应用提供目录划分:

一:上目录结构

二:上代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h1>用户登录</h1>
<form method="POST">
    <input type="text" name="user"/>
    <input type="submit" value="提交"/>
</form>

<img src="static/code.png">

<img src="{{ url_for('static',filename='code.png') }}">

</body>
</html>
login.html
# -*- coding: utf-8 -*-
# @Author : Felix Wang
# @time   : 2018/7/5 13:54

from flask import Blueprint
from flask import render_template
from flask import request

# 创建一个蓝图
# template_folder表示找模板的时候可以放在自己的目录找
# url_prefix表示给当前蓝图的url加个前缀,批量操作
account = Blueprint('account', __name__, url_prefix='/acc',template_folder='tpls')


@account.route('/login', methods=['GET', 'POST'], endpoint='account')
# 注意蓝图的名字和函数名字不能相同
def login():
    # return render_template('login.html')
    return render_template('login.html')

# 在单个蓝图中定义扩展,只有在当前蓝图中生效
@account.before_request
def process_request(*args,**kwargs):
    print('来了')
account.py
# -*- coding: utf-8 -*-
# @Author : Felix Wang
# @time   : 2018/7/5 13:58

from flask import Blueprint, render_template

blog = Blueprint('blog', __name__)


@blog.route('/blog', methods=['GET', 'POST'],endpoint='blog')
def blog2():
    # return render_template('blog.html')
    return 'blog'
blog.py
# -*- coding: utf-8 -*-
# @Author : Felix Wang
# @time   : 2018/7/5 13:59

from flask import Blueprint, session, url_for, redirect

user = Blueprint('user', __name__)


@user.route('/user', methods=['GET', 'POST'], endpoint='user')
# 蓝图和函数不能重名,因为重名的话,导入就不知道导入哪个了
def user2():
    # return render_template('user.html')
    return 'user'


# 使用扩展来解决登录问题,比用装饰器好,每次访问之前都执行,使用蓝图之后就不用设置白名单了
# 因为扩展只对当前蓝图生效
@user.before_request
def process_request(*args, **kwargs):
    user = session.get('user_info')
    if user:
        return None
    url = url_for('l1')  # 根据别名生成url
    return redirect(url)
user.py
# -*- coding: utf-8 -*-
# @Author : Felix Wang
# @time   : 2018/7/5 13:51

from flask import Flask

app = Flask(__name__, template_folder='templates', static_folder='static', static_url_path='/static')

from .views.account import account
from .views.blog import blog
from .views.user import user

# 注册蓝图
app.register_blueprint(account)
app.register_blueprint(blog)
app.register_blueprint(user)


# 在app这添加扩展,对所有注册的蓝图都生效
@app.before_request
def process_request(*args, **kwargs):
    print('来了')
__init__.py
# -*- coding: utf-8 -*-
# @Author : Felix Wang
# @time   : 2018/7/5 13:50

from pro_flask import app

if __name__ == '__main__':
    app.run()
run.py

简单的蓝图(小型的应用程序):下载

相关链接

猜你喜欢

转载自www.cnblogs.com/felixwang2/p/9268601.html