博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
webpy猫腻之session with reloader
阅读量:6425 次
发布时间:2019-06-23

本文共 1695 字,大约阅读时间需要 5 分钟。

在使用webpy的session时经常会发现按照文档是说明构造的session用法却总是出错,和预想差异很大。通过跟踪webpy源码发现原来默认情况下webpy在session这块儿做了很多手脚。举例如下:

(1)session不能在debug模式中使用
(2)session不能在webpy内置的wsgi server中使用
究其原因是因为webpy在debug或者内置wsgi server中使用的时候启用了模块级的reload,reloader 加载了主模块零次,一次是作为__main__被加载,一次是作为真正的文件被加载,这样就导致了程序中使用的session不是同一个。通过查看webpy源码中的application.py/modname()函数可以发现:

def main_module_name():                 mod = sys.modules['__main__']                 file = getattr(mod, '__file__', None) # make sure this works even from python interpreter                 return file and os.path.splitext(os.path.basename(file))[0] def modname(fvars): """find name of the module name from fvars."""                 file, name = fvars.get('__file__'), fvars.get('__name__') if file is None or name is None: return None if name == '__main__': # Since the __main__ module can't be reloaded, the module has                     # to be imported using its file name.                                        name = main_module_name() return name             mapping_name = utils.dictfind(fvars, mapping)             module_name = modname(fvars)

为解决这一问题(毕竟使用webpy内置webserver调试程序还是很方便的),可以在启动webpy application之前做一点儿小手脚,具体代码如下:

here we will use the session to store global variables # use this to bypass the webpy reloader if web.config.get("_session") is None: # set initial     perms = PermWrapper({}) from web import utils     user = utils.Storage({
"user_login": "Anonymous"}) session = web.session.Session(app, web.session.DiskStore('sessions'), initializer={
"perms": perms, "user": user}) web.config._session = session else: session = web.config._session

转载于:https://www.cnblogs.com/Jerryshome/archive/2012/03/02/2377384.html

你可能感兴趣的文章
程序制作 代写程序 软件定制 代写Assignment 网络IT支持服务
查看>>
mysql 案例~select引起的性能问题
查看>>
直接读取图层
查看>>
springsecurity 源码解读 之 RememberMeAuthenticationFilter
查看>>
HTML5标准学习 - 编码
查看>>
JS 时间戳转星期几 AND js时间戳判断时间几天前
查看>>
UVa11426 最大公约数之和(正版)
查看>>
mime
查看>>
SQL练习之求解填字游戏
查看>>
DOM
查看>>
UIApplication
查看>>
12:Web及MySQL服务异常监测案例
查看>>
数据库性能优化之冗余字段的作用
查看>>
DBA_实践指南系列9_Oracle Erp R12应用补丁AutoPatch/AutoControl/AutoConfig(案例)
查看>>
数据库设计三大范式
查看>>
ionic 字体的导入方法
查看>>
IP路由原理
查看>>
内部类详解
查看>>
洛谷P2726 阶乘 Factorials 数学
查看>>
类加载机制
查看>>