Flask 中的 蓝图 Blueprint

不能被run的flask实例;相当于django中的app01 应用

蓝图作用:功能隔离 路由隔离

Blueprint就是 一个不能run的flask

蓝图的名称app01user 必须保证在app中是唯一

url_prefix 是url前缀;用于隔离相同url

# blueprint.py
from flask import Flask
app = Flask(__name__)
app.debug = True # 建立蓝图注册 一定要注册
from app01.views import user as app01_user
from app02.views import user as app02_user app.register_blueprint(app01_user)
app.register_blueprint(app02_user) if __name__ == '__main__':
app.run()

app01

from flask import Blueprint, render_template

# Blueprint就是 一个不能run的flask

# 蓝图的名称app01user 必须保证在app中是唯一
user = Blueprint("app01user", __name__, template_folder="app01/templates/", url_prefix="/admin") # url_prefix是url前缀;用于隔离相同url @user.route('/login')
def login():
# return "i am app01 blueprint"
return render_template("login.html")

app02

from flask import Blueprint, render_template

# Blueprint就是 一个不能run的flask
user = Blueprint("app02user", __name__, url_prefix="/shopping") # url_prefix @user.route('/login')
def login():
return "i am app02 blueprint"
# return render_template('login.html')

蓝图结构

  • 项目文件下分别创建manage.py 创建app01目录;
  • 在app01目录下分别创建views文件夹、static文件夹、templates文件夹、init.py、models.py
  • views 文件夹下创建蓝图 blueprint

# __init__,py
from flask import Flask
from app01.views.blueptrint import user #导入蓝图
def create_app():
app = Flaks(__name__)
app.congig['DEBUG'] = True # 注册蓝图
app.register_blueprint(user) # 将app返回
return app
# manage.py
# 导入app 实例
from app01 import create_app
app = create_app() # 运行
if __name__ = '__main__'
app.run()
# views 下 创建蓝图 blueprint
from flask import Blueprint
# 蓝图实例 user为蓝图名称
user = Blueprint("user" , __name__) @user.route("/login")
def login():
return "ok 200"

此时就可以运行manage.py文件了;或者Terminal下执行命令 python manage.py运行。

Flask 特殊装饰器

  • @app.before_request 请求进入视图函数之前

  • @app.after_request 请求结束,返回影响客户端之前

    正常 be1 - be2 - be3 - vf - af3 - af2 - af1

    异常 be1 - be2 - af3 - af2 - af1

  • @app.errorhandler(4xx or 5xx) 重定义错误信息

from flask import Flask, request, session, redirect, render_template
from functools import wraps app = Flask(__name__)
app.secret_key = "!@#$%^&*()"
USER = {"username": "anwen"} # def wrapper(func):
# @wraps(func)
# def inner(*args, **kwargs):
# if session.get("user"):
# ret = func(*args, **kwargs)
# return ret
# else:
# return redirect("/login")
#
# return inner @app.before_request
def be1():
print("be1") @app.before_request
def be2():
print("be2")
if request.path == "/login":
return None
if session.get("user"):
return None
else:
return redirect("/login") @app.before_request
def be3():
print("be3") @app.after_request
def af1(res):
print("af1")
return res @app.after_request
def af2(res):
print("af2")
return res @app.after_request
def af3(res):
print("af3")
return res @app.route('/login', methods=["GET", "POST"])
# @wrapper
def login():
if request.method == 'GET':
return render_template("login.html")
else:
if request.form.get("username") == USER["username"]:
session['user'] = request.form.get("username")
return redirect('/index') @app.route("/index")
# @wrapper
def index():
print("我是视图函数index")
return render_template("index.html") @app.route("/index1")
# @wrapper
def index1():
return render_template("index.html") @app.route("/index2")
# @wrapper
def index2():
return render_template("index.html") @app.errorhandler(404)
def error404(ErrorMessage):
print(ErrorMessage)
return redirect("https://www.autohome.com.cn/beijing/asdfe32r24rff23r23r")
# return send_file("image/1.jpg") if __name__ == '__main__':
app.run()

最新文章

  1. npm不是以管理身份运行遇到的问题
  2. pl/sql里的exists和in的差别
  3. Win7 64位 VS2015及MinGW环境编译FFMPEG-20160326
  4. html文本标准模式,首行空两格,两端对齐,行高
  5. Python之路【第七篇续】:I/O多路复用
  6. HOG matlab练习
  7. 创建ORACLE 查询用户
  8. C#调用SCL2008 动态库SCL_API_cdecl.dll or SCL_API_Stdcall.dll,提示找不到指定模块
  9. 应用程序初次运行数据库配置小程序(Java版)
  10. InnoDB一棵B+树可以存放多少行数据?
  11. turtle画戒指
  12. MapReduce-提交job源码分析
  13. 认识正则RegExp;
  14. JAVA链表中迭代器的实现
  15. keras 上添加 roc auc指标
  16. Css中display:inline-block用法详解
  17. MediatR 中介模式
  18. Andrew Ng-ML-第十九章-应用举例:照片OCR(光学字符识别)
  19. 使用request.js代理post失败的问题
  20. [leetcode]从中序与后序/前序遍历序列构造二叉树

热门文章

  1. Python知乎上推荐的项目
  2. SNF快速开发平台2019-权限管理模型简介-权限都在这里
  3. react问题You must install peer dependencies yourself.
  4. centos7.5系统elasticsearch使用滚动和全新安装升级到最新的elasticsearch7.4.2版本
  5. 解决python3.7无法使用HTMLTestRunner.py生成html测试报告的问题2019.04
  6. LeetCode 112. Path Sum(路径和是否可为sum)
  7. Hadoop学习笔记——HDFS
  8. laravel5.8ajax请求auth认证返回302的解决方法。
  9. Flask 学习(三)路由介绍
  10. IDEA 2018.3.5,修改js文件,html页面不及时更新