资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

Flask如何使用全局变量传递数据

这篇“Flask如何使用全局变量传递数据”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Flask如何使用全局变量传递数据”文章吧。

目前创新互联已为上千余家的企业提供了网站建设、域名、网站空间网站托管、企业网站设计、科尔沁左翼网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

环境

$ python --version
Python 3.7.0

$ pip show flask
Name: Flask
Version: 2.0.3

需求:

全局入口before_request,我们拦截用户请求,对用户权限进行统一校验,校验通过再放行,否则拦截用户。

将校验通过的当前用户 user_id 存放到全局变量,以便后续处理方法使用,比如获取当前用户的一些信息

实现:

1、Flask使用全局变量g 的示例

# -*- coding: utf-8 -*-
from flask import Flask, g

app = Flask(__name__)


@app.get('/')
def index():
    return {'user_id': g.user_id}


@app.before_request
def handle_before_request():
    g.user_id = 100
    print('before_request')


if __name__ == '__main__':
    app.run(debug=True)

2、改用手动注册的方式进行路由绑定, 也可以获取到全局变量g

# -*- coding: utf-8 -*-
from flask import Flask, g

app = Flask(__name__)


def index():
    return {'user_id': g.user_id}


@app.before_request
def handle_before_request():
    g.user_id = 100
    print('before_request')


# 改用手动注册的方式进行路由绑定
app.add_url_rule('/', view_func=index)

if __name__ == '__main__':
    app.run(debug=True)

3、拆分到单独的函数,也可以获取到全局变量g

# -*- coding: utf-8 -*-
from flask import Flask, g

app = Flask(__name__)


def index():
    return {'user_id': g.user_id}


# 拆分到单独的函数使用 g
def permission():
    g.user_id = 100


@app.before_request
def handle_before_request():
    permission()
    print('before_request')


# 改用手动注册的方式进行路由绑定
app.add_url_rule('/', view_func=index)

if __name__ == '__main__':
    app.run(debug=True)

问题及报错

1、报错1

from flask import g


g['user_id'] = 1

TypeError: '_AppCtxGlobals' object does not support item assignment

2、报错2

from flask import g

g.user_id = 1

TypeError: '_AppCtxGlobals' object is not subscriptable

以上就是关于“Flask如何使用全局变量传递数据”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注创新互联行业资讯频道。


文章名称:Flask如何使用全局变量传递数据
本文URL:http://www.cdkjz.cn/article/jopecg.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220