当前位置:   article > 正文

Flask上下文概念和蓝图的使用_如何拿到关卡蓝图的上下文

如何拿到关卡蓝图的上下文

1.上下文概念与Flask上下文对象分类

 Flask上下文
上下文:即语境,语意,在程序中可以理解为在代码执行到某一时刻时,根据之前代码所做的操作以及下文即将要执行的逻辑,可以决定在当前时刻下可以使用到的变量,或者可以完成的事情
Flask上下文对象分类: (1).请求上下文:  1).request    2).session
                   (2).应用上下文:   1).current_app  2).g对象
 

2.请求上下文之request与session

请求上下文: request与session
 request对象: 封装了HTTP请求的内容, 针对的是HTTP请求. 请求的数据封装在request对象中, 比如查询参数, 文件数据等
 session:session用来记录请求会话中的信息, 针对的是用户信息.

3.应用上下文current_app与g对象

current_app对象:

current_app事实上是Flask实例的代理, 由于一个项目只能有一个app实例, 在其他地方使用app需要导入, 不方便使用, current_app就是APP的全局代理. 在代码不方便操作flask的APP对象时, 可以操作current_app就等价于操作APP实例.
    current_app用于存储应用程序中的变量:
        - 应用的启动脚本是哪个文件, 启动时指定了哪些参数
        - 加载了哪些配置文件, 导入了哪些配置
        - 连接了哪个数据库
        - 有哪些public的工具类, 常量
        - 应用跑在哪个机器上, IP是多少,内存多大等等信息

g对象:

g对象作为flask程序全局的一个临时变量, 充当中间媒介的作用, 我们可以通过它在一次请求调用的多个函数间传递一些数据, 相当与一个共享的数据容器, 每次请求都会重设这个变量.

g对象实例:

  1. from flask import Flask, g
  2. app = Flask(__name__)
  3. def db_query():
  4. user_id = g.user_id
  5. user_name = g.user_name
  6. print('user_id={} user_name={}'.format(user_id, user_name))
  7. @app.route('/')
  8. def get_user_profile():
  9. g.user_id = 131
  10. g.user_name = 'Jeremy'
  11. db_query()
  12. return 'hello world'

4.手动开启上下文

手动开启上下文:

在flask程序未运行的情况下, 调试代码或进行测试, 同样需要使用current_app, g, request这些对象, 但程序未运行, 所以无法使用, 此时需要手动开启上下文.

app_context:

app_context为我们提供了应用上下文环境, 允许我们在外部使用应用上下文current_app, g. 可以通过with语句进行使用:

  1. >>> from flask import Flask
  2. >>> app = Flask('')
  3. >>> app.redis_cli = 'redis client'
  4. >>>
  5. >>> from flask import current_app
  6. >>> current_app.redis_cli # 错误,没有上下文环境
  7. 报错
  8. >>> with app.app_context(): # 借助with语句使用app_context创建应用上下文
  9. ... print(current_app.redis_cli)
  10. ...
  11. redis client
  12. # request_context

request_context为我们提供了请求上下文环境,允许我们在外部使用请求上下文request、session可以通过with语句进行使用

  1. >>> from flask import Flask
  2. >>> app = Flask('')
  3. >>> request.args # 错误,没有上下文环境
  4. 报错
  5. >>> environ = {'wsgi.version':(1,0), 'wsgi.input': '', 'REQUEST_METHOD': 'GET', 'PATH_INFO': '/', 'SERVER_NAME': 'itcast server', 'wsgi.url_scheme': 'http', 'SERVER_PORT': '80'} # 模拟解析客户端请求之后的wsgi字典数据
  6. >>> with app.request_context(environ): # 借助with语句使用request_context创建请求上下文
  7. ... print(request.path)
  8. ...

5.蓝图

蓝图概念:

在Flask中, 蓝图(blueprint)是一种用来扩展已有Flask应用结构的方式, 蓝图提供了一种把功能类似的视图函数组合在一起的方式, 通过这种方式, 开发者能够把他们的应用拆分成不同的组件. 在我们的架构中, 蓝图的作用类似于控制器(controller).

蓝图实现:
0.导包
1.创建蓝图
2.添加蓝图路由
2.注册蓝图

  1. # 1创建蓝图 & 2添加蓝图路由
  2. from flask import Blueprint
  3. # 创建蓝图对象
  4. users_bp = Blueprint('users', __name__)
  5. # 添加蓝图路由
  6. @users_bp.route('/index')
  7. def indext():
  8. return 'users bp response'
  1. # 3.注册蓝图
  2. from flask import Flask
  3. # 导入蓝图
  4. from apps.users_bp import users_bp
  5. # 创建Flask实例
  6. app = Flask(__name__)
  7. # 注册蓝图
  8. app.register_blueprint(users_bp)
  9. if __name__ == '__main__':
  10. # 查看路由映射
  11. print(app.url_map)
  12. app.run()


 
 
      

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/448845
推荐阅读
相关标签
  

闽ICP备14008679号