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

一:上目录结构

二:上代码

<!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

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

相关链接

flask框架(十一): 蓝图的更多相关文章

  1. Python-S9-Day116——Flask框架相关

    01 内容回顾 02 Flask框架:路由和视图(一) 03 Flask框架:路由和视图(二) 04 Flask框架:路由和视图(三) 05 Flask框架:路由和视图(四) 06 Flask框架:s ...

  2. Python框架学习之Flask中的蓝图与单元测试

    因为Flask框架的集成度很低,随着Flask项目文件的增多,会导致不太好管理.但如果对一个项目进行模块化管理的,那样子管理起来就会特别方便.而在Flask中刚好就提供了这么一个特别好用的工具蓝图(B ...

  3. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  4. flask框架(七)——蓝图、请求上下文、g对象、信号、flask_session

    蓝图 作用:对程序进行目录结构划分 不使用蓝图情况下,自己分文件 目录结构: -templates -views -__init__.py -user.py -order.py -app.py app ...

  5. Flask框架(三)—— 请求扩展、中间件、蓝图、session源码分析

    Flask框架(三)—— 请求扩展.中间件.蓝图.session源码分析 目录 请求扩展.中间件.蓝图.session源码分析 一.请求扩展 1.before_request 2.after_requ ...

  6. python flask框架 蓝图的使用

    蓝图的目的是实现 各个模块的视图函数写在不同的py文件当中. 主视图 中 导入 分路由视图的模块,并且注册蓝图对象 分路由视图中 利用 蓝图对象 的route 进行装饰视图函数 主路由视图函数: #c ...

  7. python框架之Flask(3)-Blueprint(蓝图)

    蓝图 用途 给开发者提供清晰的目录结构. 使用 目录结构 1.创建项目. 2.在项目目录下创建与项目名同名文件夹. 3.在 test_prj 文件夹下创建 __init__.py 文件,并在其中实例化 ...

  8. Flask框架

    FLask框架的简单介绍 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请 ...

  9. Flask框架搭建REST-API服务

    一.目的 为了能够将测试工具部署成RESTful-API服务,这样就能通过接口的方式提供统一测试工具服务,使用人员就不用构建application而产生的各种环境问题.使用问题. 适合人群:Pytho ...

  10. Flask路由与蓝图Blueprint

    需求分析: 当一个庞大的系统中有很多小模块,在分配路由的时候怎么处理呢?全部都堆到一个py程序中,调用@app.route? 显然这是很不明智的,因为当有几十个模块需要写路由的时候,这样程序员写着写着 ...

随机推荐

  1. Elastic Search常用元数据简介

    在ES中,除了定义的index,type,和管理的document外,还有若干的元数据.这些元数据用于记录ES中需要使用的核心数据.在ES中,元数据通常使用下划线’_’开头. 1 查看数据GET /i ...

  2. Spring 基于 AspectJ 的 AOP 开发

    Spring 基于 AspectJ 的 AOP 开发 在 Spring 的 aop 代理方式中, AspectJ 才是主流. 1. AspectJ 简介 AspectJ 是一个基于 java 语言的 ...

  3. STL-set 容器以及迭代器的简单理解

    先说下set的基本操作和时间复杂度 begin()     ,返回set容器的第一个元素 end() ,返回set容器的最后一个元素 clear()        ,删除set容器中的所有的元素 em ...

  4. [js]$.ajax标准写法

    $.ajax({     url:"http://www.microsoft.com",    //请求的url地址     dataType:"json",  ...

  5. ubuntu 网卡名称重命名

    ubuntu 网卡名称重命名 参考:https://blog.csdn.net/hzj_001/article/details/81587824 biosdevname 和 net.ifnames 两 ...

  6. 第一章 PHP mySQL

    一,服务器环境搭建 1-1.Apache服务器.(端口号定义,http协议,开启和关闭) 服务器: 我们在浏览器浏览网页的时候,在地址栏中都会产生一个url.通过这个url,浏览器从互联网中找到一个网 ...

  7. 编译原理-递归下降分析法 c程序部分的分析

    实验三 语法分析程序实验 专业 商软2班   姓名 黄仲浩  学号 201506110166 一. 实验目的      编制一个部分文法分析程序. 二. 实验内容和要求 输入:源程序字符串 输出:正确 ...

  8. 几种常用的java 实现反转的方法———reverse

    1.最简单的方法 public static String reverse1(String str) return new StringBuffer(str).reverse().toString() ...

  9. UEFI笔记 --- PeiReadOnlyVariable2->GetVariable()

    问:在PEI阶段,PeiReadOnlyVariable2->GetVariable()可以从Pei Hob或NV RAM中获取UEFI变量,例如Setup默认值.若平台首次烧录BIOS并开机, ...

  10. python视频学习笔记6(名片管理系统开发)

    cards_main.py主函数 cards_tools.py -------------------------------------------------------------------- ...