""" flask中session的原理以及处理机制 """ from flask import Flask, session, globals app = Flask(__name__) app.secret_key = "fdfdfdfd" @app.route('/') def hello_world(): # 执行session对象的__setItem__方法 # 在local的ctx中找到session,然后向字典中写值和取值,默认的session中的字典写到cookie中去 # session['xxx'] = 123 return 'Hello World!' if __name__ == '__main__': # 请求只要进来,就执行__call__方法 """ 1.ctx = self.request_context(environ)==> 2.def request_context(self, environ): 3.return RequestContext(self, environ) 4. def __init__(self, app, environ, request=None): self.app = app if request is None: request = app.request_class(environ) self.request = request self.url_adapter = app.create_url_adapter(self.request) 5.self.flashes = None 6.self.session = None ctx.push() _request_ctx_stack.push(self) 放入到local中去 #session中赋值 if self.session is None: session_interface = self.app.session_interface self.session = session_interface.open_session( self.app, self.request ) #save.session #open.session if self.session is None: self.session = session_interface.make_null_session(self.app) #从 LocalProxy中取值 _request_ctx_stack = LocalStack() _app_ctx_stack = LocalStack() current_app = LocalProxy(_find_app) #偏值函数 request = LocalProxy(partial(_lookup_req_object, 'request')) session = LocalProxy(partial(_lookup_req_object, 'session')) g = LocalProxy(partial(_lookup_app_object, 'g')) ctx = self.request_context(environ) error = None try: try: ctx.push() response = self.full_dispatch_request() except Exception as e: error = e response = self.handle_exception(e) except: error = sys.exc_info()[1] raise return response(environ, start_response) finally: if self.should_ignore_error(error): error = None ctx.auto_pop(error) """ # app.__call__ # app.wsgi_app app.run()
Python之Flask上下文
最新推荐文章于 2024-02-18 12:41:00 发布