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

        

  • 相关阅读:
    How to install VXDIAG Honda, Toyota and JLR SDD software
    16% off MPPS V16 ECU tuning tool for EDC15 EDC16 EDC17
    Cummins INSITE locked and ask for verification code
    How to use BMW Multi Tool 7.3 to replace lost key for BMW X1
    Bleed Brake Master Cylinder with Intelligent Tester IT2
    Porsche Piwis Tester II “No VCI has been detected”,how to do?
    Creader VIII VS. Creader VII+
    How to solve GM MDI cannot complete the installation
    汽车OBD2诊断程序开发 (原文转载,思路很清晰!)
    汽车节温器单片机开发思路
  • 原文地址:https://www.cnblogs.com/rrtwin/p/11945193.html
Copyright © 2020-2023  润新知