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()

Flask蓝图Blueprint和特殊装饰器的更多相关文章

  1. Flask蓝图(Blueprint)

    一.作用 1.目录结构划分 2.url添加前缀 url_prefix 3.应用特殊装饰器,在该蓝图定义的特殊装饰器,只在改蓝图的起效 二.简单示例 1.创建一个项目文件 2.创建一个同名的python ...

  2. 测试平台系列(4) 使用Flask蓝图(blueprint)

    使用Flask蓝图(blueprint) 回顾 先来看一下上一篇的作业吧,使用「logbook」的时候,遇到了时区不对的情况.那么我们怎么去解决这个问题呢? 实际上logbook默认采用的是世界标准时 ...

  3. python全栈开发day111-flask路由及其参数,Flask配置,蓝图,几个装饰器、闪现、send_file、jsonify

    1.endpoint参数,解决视图函数重名问题(包括装饰后重名问题) http://www.cnblogs.com/eric-nirnava/p/endpoint.html 每个应用程序app都有一个 ...

  4. Flask 蓝图(Blueprint)

    蓝图使用起来就像应用当中的子应用一样,可以有自己的模板,静态目录,有自己的视图函数和URL规则,蓝图之间互相不影响.但是它们又属于应用中,可以共享应用的配置.对于大型应用来说,我们可以通过添加蓝图来扩 ...

  5. flask的路由配置,特殊装饰器

    1,flask中的路由 endpoint-url_for反向地址 endpoint默认是视图函数名endpoint="雪雪" methods 指定视图函数的请求方式,默认GET d ...

  6. flask 第三章 特殊装饰器 CBV Flask-Session WTForms

    1.flask中的特殊装饰器 前面我们讲过的装饰器函数中,用来登录验证,这次我们来介绍几个flask中的特殊装饰器 1). @app.before_request 具体的用途是: 在请求进入视图函数之 ...

  7. 5. 使用Flask蓝图(blueprint)

    一直到现在都没有怎么写代码,可能更得比较慢. 作业回顾 先来看一下文章4的作业吧,使用logbook的时候,遇到了时区不对的情况.那么我们怎么去解决这个问题呢? 实际上logbook默认采用的是世界标 ...

  8. Python Flask 蓝图Blueprint

    1. 目录结构 2. manage.py类似于django中manage import fcrm if __name__ == '__main__': fcrm.app.run(port=8001) ...

  9. flask蓝图blueprint是什么

    蓝图 blueprint 简单的说,就是帮助我们对flask程序进行目录结构的划分:django项目创建时,是自动生成项目目录,而在flask这里,需要我们自己来规划,这就需要blueprint来将整 ...

随机推荐

  1. HDFS修改副本数,并生效。

    1.hadoop集群使用的ucloud的uahdoop 2.是公司集群配置小,只有两台core节点,实际就是两台的datanode. 容量占用超过了80%,需要缩减副本以空出容量. 3.查看 hado ...

  2. HTML+CSS实现鼠标点上去动画效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 容器docker快速入门

    一.概述 什么是docker docker是一个应用容器引擎,通俗的讲,docker和我们的vm虚拟机有很多相似的地方,当然也有很多不同的地方 Docker理念是将应用及依赖包打包到一个可移植的容器中 ...

  4. Ajax验证

    import javax.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactor ...

  5. [原]使用kubeadm部署kubernetes(一)

    #######################    以下为声明  ##################### 在公众号  木子李的菜田 输入关键词:   k8s 有系列安装文档 此文档是之前做笔记在 ...

  6. NET高级开发工程师职责要求

    岗位职责1.参与架构以及核心业务的设计:2.使用简单,干净,可维护性高,扩展性好的代码实现产品功能,并在必要时重构现有代码:3.贯彻面向接口以及模块化组件的设计理念:4.熟练RabbitMQ.ES.M ...

  7. mysql 8.0下的SELECT list is not in GROUP BY clause and contains nonaggregated column

    mysql的版本 mysql> select version();+-----------+| version() |+-----------+| 8.0.12 |+-----------+ 在 ...

  8. Node.js实现PC端类微信聊天软件(一)

    Github StackChat 技术栈 写这个软件StackChat的主要目的是巩固练习Node和对React的实践,也是为了学习东西,所以选用了这些自己还没在项目里使用过的技术,边学变写 Elec ...

  9. spark 开启job history

    1.首先需要创建spark.history.fs.logDirectory hadoop fs -mkdir hdfs://ns1:9000/user/hadoop/logs 2.修改hadoop-d ...

  10. Appium 中使用 pressKeyCode 方法不起作用也没有报错

    为了使 appium 支持 Android 系统 7 及以上,automationName 使用了 UIAutomator2.但是发现,使用androidDriver.pressKeyCode(And ...