食品加工设备建站方案,域名链接网站,erp教学零基础入门,公司建设网站需求分析报告流程图如下图所示#xff1a;
调用相关类如下图所示#xff1a; 相关代码如下#xff1a;
from flask import Flask, sessionapp Flask(__name__)1. 加密会话数据#xff1a;在 Flask 中#xff0c;会话数据存储在客户端的 cookie 中。设置 app.secret_key 可以加密会话…流程图如下图所示
调用相关类如下图所示 相关代码如下
from flask import Flask, sessionapp Flask(__name__)1. 加密会话数据在 Flask 中会话数据存储在客户端的 cookie 中。设置 app.secret_key 可以加密会话 cookie确保数据的安全性。
2. 签名数据通过设置 app.secret_keyFlask 可以对客户端发送的数据进行签名用于验证数据的完整性和来源。app.secret_key 1111111app.route(/index1)
def index():# 调用session的__setitem__方法# 去ctx中获取session特殊的字典session[k1] 123return Indexapp.route(/index2)
def index2():# 调用session的__getitem__方法print(session[k1])return Index2if __name__ __main__:app.__call__()app.run()
1、flask实例化之后可以执行的__ call __方法
# self为实例化的app对象
def __call__(self, environ: WSGIEnvironment, start_response: StartResponse
) - cabc.Iterable[bytes]:# 调用wsgi_app方法return self.wsgi_app(environ, start_response)
2、调用wsgi_app方法
def wsgi_app(self, environ: WSGIEnvironment, start_response: StartResponse
) - cabc.Iterable[bytes]:# 调用request_context方法返回ctx对象request_context方法中返回一个类对象RequestContextctx RequestContext(self, environ)结合下面的流程最终可以得到ctx中有request(environ),session;将两者打包到一块ctx self.request_context(environ)error: BaseException | None Nonetry:try:对session进行赋值if self.session is None:session_interface self.app.session_interfaceself.session session_interface.open_session(self.app, self.request)
if self.session is None:self.session session_interface.make_null_session(self.app)ctx.push()执行视图函数response self.full_dispatch_request()except Exception as e:error eresponse self.handle_exception(e)except: # noqa: B001error sys.exc_info()[1]raisereturn response(environ, start_response)finally:if werkzeug.debug.preserve_context in environ:environ[werkzeug.debug.preserve_context](_cv_app.get())environ[werkzeug.debug.preserve_context](_cv_request.get())
if error is not None and self.should_ignore_error(error):error None
ctx.pop(error)
2.1、request_context方法源码如下
def request_context(self, environ: WSGIEnvironment) - RequestContext:# 返回RequestContext对象 self 表示实例化的Flask对象appenviron表示wsgi环境return RequestContext(self, environ)
2.1.1、RequestContext类中进行的操作
def __init__(self,app: Flask,environ: WSGIEnvironment,request: Request | None None,session: SessionMixin | None None,
) - None:self.app app判断如果request是空的话将其赋值为app.request_class(environ)即 request_class: type[Request] RequestrequestRequestif request is None:request app.request_class(environ)request.json_module app.jsonself.request: Request requestself.url_adapter Nonetry:self.url_adapter app.create_url_adapter(self.request)except HTTPException as e:self.request.routing_exception eself.flashes: list[tuple[str, str]] | None None设置session值self.session: SessionMixin | None session
self._after_request_functions: list[ft.AfterRequestCallable[t.Any]] []......
2.2、调用push方法对session进行赋值
def push(self) - None:app_ctx _cv_app.get(None)
if app_ctx is None or app_ctx.app is not self.app:app_ctx self.app.app_context()app_ctx.push()else:app_ctx None
self._cv_tokens.append((_cv_request.set(self), app_ctx))
对session进行赋值if self.session is None:# session_interface: SessionInterface SecureCookieSessionInterface()session_interface self.app.session_interface# SecureCookieSessionInterface.open_session(self.app, self.request)self.session session_interface.open_session(self.app, self.request)
if self.session is None:self.session session_interface.make_null_session(self.app)
if self.url_adapter is not None:self.match_request()
2.2.1、SecureCookieSessionInterface.open_session(self.app, self.request)方法由此所知session是一个特殊的字典。
def open_session(self, app: Flask, request: Request) - SecureCookieSession | None:s self.get_signing_serializer(app)if s is None:return None如果拿不到值就返回session_class()session_class() class SecureCookieSession(CallbackDict, SessionMixin)继承class CallbackDict(UpdateDictMixin, dict):CallbackDict继承dict字典val request.cookies.get(self.get_cookie_name(app))if not val:return self.session_class()max_age int(app.permanent_session_lifetime.total_seconds())try:data s.loads(val, max_agemax_age)return self.session_class(data)except BadSignature:return self.session_class()
初步学习继续补充完善......