flask---闪现/请求扩展/g对象

闪现

复制代码
# 一个请求---》假设出错了---》重定向到另一个地址---》把错误信息在另一个返回中看到
错误信息放个位置----》另一个请求过来,去那个位置拿
# 把一些数据,放在某个位置---》后期可以去取出来----》取完不用删除,就没了
def index():
    s='xx错位了'
    return redirect('/errors')

def errors():
    return index.html



# 如何设置
flash('aaa')
# 如何取
get_flashed_message()

# 分类放
flash('超时错误', category="x1")
# 分类取
data = get_flashed_messages(category_filter=['x1'])

from flask import Flask,flash,get_flashed_messages

app=Flask(__name__)
app.debug=True
app.secret_key='asdfasdfasdfa'
# 只要用闪现---》就要设置secret_key----》放到session中了

@app.route('/')
def index():
    # 放入我的名字
    # flash('lqz')  # 放哪了?

    # 分类放
    flash('超时错误', category="x1")
    return 'xxx'
@app.route('/home')
def home():
    # 取出我的名字
    name=get_flashed_messages(category_filter=['x2'])
    print(name)
    return 'home'

@app.route('/order')
def order():
    # 取出我的名字
    # name=get_flashed_messages()
    # print(name)
    data = get_flashed_messages(category_filter=['x1'])
    print(data)
    # 按分类取
    return 'home'
if __name__ == '__main__':
    app.run(port=8080)

# 1 django 的message就是做这个事的
# 2 闪现有什么用?
	-暂时存数据
    -当次请求出错了,下次请求要显示这个错误

请求扩展

复制代码
# 类似于django中的中间件
	-请求来了,请求走了,做一些拦截
        1 before_request
        2 after_request
        3 before_first_request
        4 teardown_request
        5 errorhandler
        6 template_global
        7 template_filter
        
        
# before_request 每个请求来了,都会走

before_request

复制代码
# 请求来了执行---》process_request--->可以下多个,从上往下依次执行
@app.before_request
def before():
    # 当次请求的对象就是request
    # 1  判断访问的不同路径
    # if request.path=='/':
    #     print('我来了')
    # else:
    #     print('访问其他路径')
    # 2 判断如果是跟路径,向request对象中放个name,其他不放
    # if request.path == '/':
    #     request.name = 'lqz'
    # else:
    #     print('访问其他路径')

    # 3 返回None,会执行下一个请求扩展,如果返回4件套,直接就返回了,不再往下执行了
    # if request.path=='/':
    #     return '不让你访问'
    # else:
    #     print('访问其他路径')
    # 4 多个before_request,从上往下执行
    print('1111')


@app.before_request
def before2():
    print('2222')

after_request

复制代码
@app.after_request
def after2(response):
    print('走了走了222')
    return response


@app.route('/')
def index():
    # print(request.name)
    return 'xxx'

before_first_request

复制代码
# 项目运行起来的第一次会执行,以后再也不执行了
# 1.x可以,2.x弃用了

teardown_request

复制代码
# teardown_request 每一个请求之后绑定一个函数,即使遇到了异常---》一般用来记录日志--->不能做统一异常处理
@app.teardown_request
def ttt(e):
    # 通过判断e是否为空,记录日志
    print(e)  # 出了异常,e就是异常对象,如果没有异常,e就是None
    print('来了老弟')
    if e:
        return '出异常了'

errorhandler

复制代码
## errorhandler
@app.errorhandler(404)
def error(e):
    print(e)
    print('xxx')
    return render_template('error.html')


@app.errorhandler(500)
def error1(e):
    print(e)
    print('500')
    return jsonify({'code': 999, 'msg': '服务器内部错误,请联系系统管理员'})

template_global全局标签

复制代码
# template_global 全局标签,所有页面都可以用
@app.template_global()
def add(a1, a2):
    return a1 + a2

template_filter全局过滤器

复制代码
# template_filter 全局过滤器
@app.template_filter()
def db(a1, a2, a3):
    print(a1)
    return a1 + a2 + a3

g对象

复制代码
# 请求来了,在request中放个path,后续的视图函数中都能拿到
# flask不建议向request对象中放变量,建议使用g对象

# g对象,当次请求中放入的变量,在当次请求中一直存在

# global的缩写,global


# g和session的区别
	-g只针对于当次请求
    -session可以跨请求
相关推荐
geovindu7 分钟前
rust: Template Method Pattern(续)
开发语言·后端·设计模式·rust·行为模式·板方法模式
外收内放9 分钟前
面向对象高级(封装)
开发语言·python
每天一道题11 分钟前
从单体到微服务:Service、Instance 与服务拆分到底是什么关系?
后端·微服务·云原生·架构
全栈练习生16 分钟前
大模型原理之投机解码
python·ai
青少儿编程课堂17 分钟前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:差分数组与区间修改实战解析
c++·python·算法·bfs·信息学竞赛
编码者卢布19 分钟前
【Azure Storage Account】Azure Queue指标中的Transactions 高,真实业务处理的消息就多吗?
microsoft·flask·azure
怕浪猫20 分钟前
前端对接聊天 API:我用 React 做了一个比 ChatGPT 还好看的界面
前端·后端·面试
IT_陈寒25 分钟前
深入理解Python:核心原理与最佳实践
前端·人工智能·后端
小小张说故事30 分钟前
Python 的 sort 为什么又稳又快?拆开 Timsort:run 检测、minrun 与 galloping 的三板斧
python
kaizq41 分钟前
从照片开口说话实现到应用职业教培变革落地
python·应用职业教育·ai混元-元宝·数学学习基础·用中学-学中用·照片aigc-gif