zoukankan      html  css  js  c++  java
  • Flask的RuntimeError错误处理

    在Flask框架中,为我们提供了丰富的上下文对象/变量(request、session、current_app、g),这些上下文对象可以根据不同的上下文环境具备不同的值,所以他们是依赖于上下文环境的,而他们的使用也必须在上下文环境中,如果脱离了上下文环境,对这些没有上下文环境的上下文对象/变量进行相应的操作就会报错:RuntimeError

      通俗一点理解(current_app):

        应用上下文对象current_app就是对当前Flask创建出来的app对象的一个代理,所以在使用current_app的时候就需要指定它所代理的是哪个app对象(及指定上下文环境),如果未指定,系统就会报错RuntimeError

        

    from flask import Flask, current_app
    
    app = Flask(__name__)
    # 错误写法 current_app.config['SECRET_KEY'] = 'jfiagiisfashjsjf' @app.route("/") def demo(): print(current_app.config.get('SECRET_KEY')) return 'Is OK' if __name__ == '__main__': app.run()

      如果按照上面的写,就会导致current_app不知道自己所处的上下文环境,所以会报错:RuntimeError: Working outside of application context.

      修改的办法即为给当前的current_app指定上下文环境

    from flask import Flask, current_app
    
    app1 = Flask(__name__)
    app2 = Flask(__name__)


    # 利用with语句,指定当前的current_app处于的环境是app1对象 with app1.app_context(): current_app.config[
    'SECRET_KEY'] = 'jfiagiisfashjsjf'


    @app1.route("/") def demo(): print(current_app.config.get('SECRET_KEY')) return 'Is OK' if __name__ == '__main__': app1.run()

       如上,如果我创建了两个app对象app1和app2,如果我不用with语句指定current_app的上下文环境,它就不知道是代理app1还是代理app2

      同理,如果在蓝图中进行使用current_app的时候也需要指定上下文环境

      当然,如果在视图函数里面进行使用,如:

      就不需要在用with语句进行指定上下文环境了,@app1.route("/")装饰器就已经给我们指定了上下文环境。

        

  • 相关阅读:
    linux内核中GNU C和标准C的区别
    linux内核中GNU C和标准C的区别
    Getting start with dbus in systemd (02)
    Getting start with dbus in systemd (01)
    Getting start with dbus in systemd (03)
    物理内存相关的三个数据结构
    数据类型对应字节数(32位,64位 int 占字节数)
    Linux kernel 内存
    共模电感的原理以及使用情况
    [原创]DC-DC输出端加电压会烧毁
  • 原文地址:https://www.cnblogs.com/rrtwin/p/11945193.html
Copyright © 2011-2022 走看看