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("/")装饰器就已经给我们指定了上下文环境。

        

  • 相关阅读:
    《Code Complete》第一部分纪要
    深入理解Java虚拟机-JVM内存管理的猜测
    成长经验系列之三-猜想-技术未来
    深入理解Java虚拟机-第三版-前言及第一章笔记
    float与double的精度问题
    成长经验系列之二-方法-成长分享
    工作可能用的一些网站(不定时更新)
    Walkthrough: Write your first client script
    Make a Field Required in a Dynamics CRM Dialog / PowerApps
    Refresh Power BI Dataset programmatically from Dynamics 365 CRM/PowerApps
  • 原文地址:https://www.cnblogs.com/rrtwin/p/11945193.html
Copyright © 2011-2022 走看看