Web2py票据无效链接
我最近开始尝试使用web2py来做一个新项目。我非常喜欢它的结构和整体概念,感觉就像是呼吸到了新鲜空气,因为我之前用了几年PHP框架。
目前唯一让我感到困扰的是它的错误报告系统。每次我犯错时,都会出现一个页面,上面有一个指向错误报告的链接。我想如果这个链接能用的话,我也许能接受这个问题。但现在这个链接指向的是一个使用http协议的管理页面,而不是https。我查了一下,发现强制使用https是为了安全,但这让调试变得很麻烦。
这里的标准解决方案是什么呢?是修改错误页面,允许管理页面使用http,还是使用日志来调试呢?
最好的祝福,
Fredrik
2 个回答
通常情况下,我会使用 http://127.0.0.1/ 这个地址(如果你是在本地或者通过ssh连接的话),或者使用 https://... 来编辑或浏览。
所以,你第一次登录管理应用的时候会看到登录界面,但之后总是会显示票据。
我之前也遇到过和你一样的问题,我不太喜欢默认的处理方式。不过,使用web2py自定义异常处理其实很简单。你可以看看web2py目录下的routes.py文件。我在我的文件里添加了以下内容:
routes_onerror = [('application_name/*','/application_name/error/index')]
这段代码会把所有的异常都引导到我的错误处理控制器(application_name/controllers/error.py),在这里我定义了一个叫做index的函数:
def index():
if request.vars.code == '400':
return(dict(app=request.application,
ticket=None,
traceback="A 400 error was raised, this is controller/method path not found",
code=None,
layer=None,
wasEmailed=False))
elif request.vars.code == '404':
return(dict(app=request.application,
ticket=None,
traceback="A 404 error was raised, this is bad.",
code=None,
layer=None,
wasEmailed=False))
else:
fH = file('applications/%s/errors/%s' % (request.application,request.vars.ticket.split("/")[1]))
e = cPickle.load(fH)
fH.close()
__sendEmail(request.application,e['layer'],e['traceback'],e['code'])
return(dict(app=request.application,
ticket=request.vars.ticket,
traceback=e['traceback'],
code=e['code'],
layer=e['layer'],
wasEmailed=True))
你可以看到,对于非400和404的错误,我会把错误信息通过邮件发给自己,然后调用对应的视图文件views/error/index.html。在生产环境中,这个视图会显示一个通用的“抱歉,发生了错误,开发者已经收到邮件”的信息。而在我的开发服务器上,它会显示格式化的错误追踪信息。