flask-session
2018-06-18 00:26:39来源:未知 阅读 ()
一、session
session和cookie的原理和区别:
cookie是保存在浏览器上的键值对
session是存在服务端的键值对(服务端的session就是一个大字典,字典中是随机字符串)(session与request原理相同)(session原理跟上下文也有关系)
session依赖于cookie存在
session流程
当请求第一次进来,生成随机字符串
-发给用户cookie
-保存到session字典中时
它调用stark将随机字符串和对应的值放到local
视图函数
-使用时导入用top(它拿的是session)
session=LocalProxy(partile(_lookup_req_object,'session '))
请求处理完毕:
内存处理完毕后,将session做持久化(session存到数据库,存到Redis,存到加密的cookie中)
二、session源码解析
1.先执行Flask的__call__方法 ,调用出来wsgi_app,它先做request的上下文做完,请求刚进来到push中,它先处理request将请求相关的数据,然后添加到了local中,
紧接着处理session(将RequestContext对象(request,session)添加到local中),request(将request信息封装到Request(environ)对象并复制给requestContext 对 象),然后获取cookie中的随机字符串,检验是否有,没有就生成。根据随机字符串,获取服务端session保存的值。把session放到内存中,
执行wsgi_app方法下面的视图函数。执行完视图函数返回到full_dispatch_requesthong ,触发只执行一次的装饰器中(触发Flask信号),
执行完这个装饰器,紧接着执行下面的特殊的装饰器,如果这些特殊装饰器没有返回值,那么rv=None,如果有返回值,页面时就显示这个返回值,
如果没有返回值,触发执行那个视图函数,拿返回值。请求执行完返回后,调用finalize_request,对它的返回值进行封装。
如何处理的request
ctx = self.request_context(environ)
将request信息封装到Request(environ)对象并复制给
requestContext 对象
class RequestContext:
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)
self.flashes = None
self.session = None
如何处理的session
class RequestContext:
def push(self):
将RequestContext对象(request,session)添加到local中
_request_ctx_stack.push(self)
刚开始处理session
#return app.session _interface.open_session(self,request)
#app.session _interface=SecureCookieSessionInterface()
self.session = self.app.open_session(self.request)
if self.session is None:
self.session = self.app.make_null_session()
三、Flask和Django的区别
请求相关的数据
-Django:参数
-Flask: 基于Local,LocalStark对象
多个请求进来会不会混淆
-单线程
-多线程
-协程
解决: from greenlet import getcurrent as get_ident
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:python int对象的方法
下一篇:python:常用模块一
- 全面了解cookie和session 2019-05-04
- django设置cookie和session 2019-04-30
- Flask中使用cookie和session 2019-04-29
- Django | Cookie 中文编码的问题 2019-04-11
- 用 Python 描述 Cookie 和 Session 2019-04-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash