今日内容概要

  • 请求扩展
  • 蓝图
  • g对象

内容详细

1、请求扩展

# 在请求来了,请求走了,可以做一些校验和拦截,通过装饰器来实现 7 个

# 1 before_request
类比django中间件中的process_request,在请求收到之前绑定一个函数做一些事情 # 2 after_request # 3 before_first_request # 4 teardown_request # 5 errorhandler # 6 template_global # 7 template_filter
from flask import Flask, request, render_template

app = Flask(__name__)

# app.debug = True

# 1. 请求扩展之before_request,在进入视图函数之前执行,如果有多个,是从上往下执行
@app.before_request
def before():
# 判断是否登录,如果登录了继续往下走,如果没登陆
# request.xxx='lqz' 可以往请求中放值,后续可以取出来,只针对于当次请求有效
print("我执行了1111") # @app.before_request # 多个before_request 从上往下 只执行一次
# def before1():
# # 判断是否登录,如果登录了继续往下走,如果没登陆
# print("我执行了2222") # 2. 请求走了,会执行它,注册多个,按照从下往上的顺序执行
@app.after_request
def after(response):
# 写入cookie,写入响应头。。。处理跨域
print(response)
print("请求走了1111")
return response # @app.after_request
# def after2(response):
# print(response)
# print("请求走了2222")
# return response # 3. before_first_request 只会执行一次,以后就不执行了,跟用户无关,做一些初始化的工作
@app.before_first_request
def first():
print("我的第一次") # 4. teardown_request 每一个请求之后绑定一个函数,即使遇到了异常,debug为false的情况下
@app.teardown_request
def teardown(e):
print(e) # 记录日志,错误日志request.method
print("我是teardown") # 5. errorhandler 绑定响应状态码,当状态码一致,就会执行它
@app.errorhandler(404)
def err_404(arg):
print(arg)
return render_template('404.html') @app.errorhandler(500) # 500错误的返回
def err_500(arg):
print(arg)
return render_template('500.html') # 6. 标签template_global
@app.template_global()
def add(a1, a2):
return a1 + a2 # 7. 过滤器template_filter
@app.template_filter()
def add2(a1, a2, a3):
return a1 + a2 + a3 @app.route('/')
def index():
# raise Exception("错误") l = [1, 2, 4]
print(l[9])
print("我是视图函数")
return "hello web" @app.route("/home")
def home():
return render_template('home.html') if __name__ == '__main__':
app.run()

2、蓝图

# blueprint
现在项目都是单个py文件--》想划分目录--》自己定制目录结构--》app经常用---》各个文件中导来导去---》出现循环引入问题 # 一个项目有多个app,每个app有自己一套路由,使用蓝图来管理 # 第一步:定义蓝图对象
user = Blueprint('user', __name__) # 第二步:使用蓝图写路径,写请求扩展(只针对于当前蓝图生效)
@user.route('/index') # 第三步:把蓝图注册进app中
app.register_blueprint(user) # 小型项目目录划分
pro_flask
-pro_flask
-__init__.py
-statics
-templates
-views
account.py
user.py
blog.py
-run.py # 大型项目 --》有多个app
pro_flask
-pro_flask # 包
__init__.py # 包的init
admin # 包
__init__.py # 包的init
static # 自己的静态文件
templates # 自己的模板文件
models.py
views.py # 自己的视图函数
web # 包
__init__.py
static
templates
views.py run.py # 启动文件 # 以后如何划分,千奇百怪,但是都使用蓝图来做,蓝图管理自己的路由和请求扩展

3、g对象

# global的缩写,为了实现在同一个请求中,传递数据,上下文传递,赋值取值只针对于当次请求生效

# 类比 django 中的 request对象,内有context 属性
django中间件中,假设想放到request中一个数据
request.name="lqz"
rerquest.context['name']='lqz'
rerquest.context['method']='nb'
到视图函数中,就可以取出来 # g和session有什么区别?
g只针对于当次请求
session针对于多次请求
from flask import Flask, request, g

app = Flask(__name__)

@app.route('/')
def index():
print("我是视图函数")
# request.a=1
# request.b=2
# 当次请求中的上下文
g.a = 1
g.b = 3
print(add())
return "hello web" @app.route('/home')
def home():
g.a = 3
g.b = 5
print(add())
return "hello home" def add():
return g.a + g.b
# return request.a+request.b if __name__ == '__main__':
app.run()

请求扩展、蓝图、g对象的更多相关文章

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

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

  2. flask系列八之请求方法、g对象和钩子函数

    一.get方法 ,post方法 post请求在模板中要注意几点: (1)input标签中,要写name来标识这个value的key,方便后台获取. (2)在写form表单的时候,要指定method=' ...

  3. 中间件、蓝图、g对象

    中间件 ''' flask中一旦请求到来,要执行app()--->>>执行的是app.__call__,整个flask的入口 ''' from flask import Flask ...

  4. Flask中current_app和g对象

      Flask零基础到项目实战(七)请求方法.g对象和钩子函数 一.get方法 二.post方法 post请求在模板中要注意几点: input标签中,要写name来标识这个value的key,方便后台 ...

  5. Flask的闪现(message) 请求扩展 中间件 蓝图

    补充:一个编程思路 需求:做一些邮件短信微信的消息通知,比如账单告警之类的:比如数据库操作,数据库种类繁多:缓存的选择比如redis/memcache,诸如此类需要进行选择配置,如果我们单纯的用函数去 ...

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

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

  7. Flask框架 (四)—— 请求上下文源码分析、g对象、第三方插件(flask_session、flask_script、wtforms)、信号

    Flask框架 (四)—— 请求上下文源码分析.g对象.第三方插件(flask_session.flask_script.wtforms).信号 目录 请求上下文源码分析.g对象.第三方插件(flas ...

  8. 第二篇 Flask基础篇之(闪现,蓝图,请求扩展,中间件)

    本篇主要内容: 闪现 请求扩展 中间件 蓝图 写装饰器,常用 functools模块,帮助设置函数的元信息 import functools def wrapper(func): @functools ...

  9. Flask10 登录模块、表单框架、表单渲染、表单验证、bookie、请求之前钩子、g对象、编写装饰器

    from flask import Flask from flask import request from flask import render_template from flask_wtf i ...

随机推荐

  1. IIS在ASP.NET Core下的两种部署模式

    KestrelServer最大的优势体现在它的跨平台的能力,如果ASP.NET CORE应用只需要部署在Windows环境下,IIS也是不错的选择.ASP.NET CORE应用针对IIS具有两种部署模 ...

  2. C++中sort()函数使用介绍

    sort()简介 为什么选择使用sort()  在刷题的时候我们经常会碰到排序的问题,如果我们不使用一些排序的方法那我们只能手撕排序,这样就会浪费一些时间.而且我们还需要根据需要去选择相关的排序方法: ...

  3. Python中查看变量的类型,内存地址,所占字节的大小

    查看变量的类型 #利用内置type()函数 >>> nfc=["Packers","49"] >>> afc=[" ...

  4. Java/C++实现模板方法模式---数据库操作

    对数据库的操作一般包括连接.打开.使用.关闭等步骤,在数据库操作模板类中我们定义了connDB().openDB().useDB().closeDB()四个方法分别对应这四个步骤.对于不同类型的数据库 ...

  5. 用Exception类捕获所有异常的技术是怎么用的?

    3.用Exception类捕获所有异常  马克-to-win:注意,一个事实是:Exception类是所有其他异常类的父类,所以Exception类能捕获所有的异常.马克-to-win:问题是用Exc ...

  6. 在react项目中使用redux-thunk,react-redux,redux;使用总结

    先看是什么,再看怎么用: redux-thunk是一个redux的中间件,用来处理redux中的复杂逻辑,比如异步请求: redux-thunk中间件可以让action创建函数先不返回一个action ...

  7. LC-76

    给你一个字符串 s .一个字符串 t .返回 s 中涵盖 t 所有字符的最小子串.如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" . 注意: 对于 t 中重复字符 ...

  8. Svelte3聊天室|svelte+svelteKit仿微信聊天实例|svelte.js开发App

    基于svelte3.x+svelteKit构建仿微信App聊天应用svelte-chatroom. svelte-chatroom 基于svelte.js+svelteKit+mescroll.js+ ...

  9. k8s TLS bootstrap解析-k8s TLS bootstrap流程分析

    当k8s集群开启了TLS认证后,每个节点的kubelet组件都要使用由kube-apiserver的CA签发的有效证书才能与kube-apiserver通信:当节点非常多的时候,为每个节点都单独签署证 ...

  10. Golang 源码解读 01、深入解析 strings.Builder、strings.Join

    strings.Builder 源码解析. 存在意义. 实现原理. 常用方法. 写入方法. 扩容方法. String() 方法. 禁止复制. 线程不安全. io.Writer 接口. 代码. stri ...