动态感觉 静观其变

居住地:江西南昌,msn:xlp223(at)hotmail.com,gmail talk:myhat123(at)gmail.com, 欢迎交流。喜欢python,也喜欢rails框架。

逝者如斯
网志分类
· 所有网志
· python学习
· pylons学习
· erlang学习
· ruby学习
· linux
· dotnet
· java
· 其他动态语言
· 感想心得
· ice学习
· 生活琐事
· 其他小玩意
搜索本站
友情链接
· 我们的小歪
· 管理我的Blog
· limodou的学习记录
· ywl51
· 花钱的年华
· python资料
· hd的blog
· oneZ
· hgf
· devin's braindump
· pylons
· sqlalchemy
· michael
· xyb
· kjd
· eiffelqiu
· okpython中国

订阅 RSS

0176669

歪酷博客


« 上一篇: pylonshq.com的模板(2) 下一篇: BaseController »
Hzg @ 2006-04-13 14:18

今天在看pylonshq.com的error的处理机制。它与默认的错误处理有些不同。首先在controller上,可以看到error.py

class ErrorController(BaseController):
    ......
    def document(self, ARGS):
        """
        Change this method to change how error documents are displayed
        """
        if str(ARGS.get('code')) == '404':
            c.referer = request.environ.get('HTTP_REFERER')
            m.subexec('/errors/404.myt')
        else:
            c.code = ARGS.get('code')
            c.message = ARGS.get('message')
            m.subexec('/errors/generic.myt')


错误处理的开始配置在config下的middleware.py中make_app()

app = ErrorDocuments(app, global_conf, mapper=error_mapper, **app_conf)

error_mapper是在pylons包中middlerware.py中定义:

def error_mapper(code, message, environ, global_conf={}, kw={}):
    codes = [401, 403, 404]
    if not asbool(global_conf.get('debug', 'true')):
        codes.append(500)
    if code in codes:
        url = '%s/error/document/?%s'%(get_prefix(environ), urlencode({'message':message, 'code':code}))
        return url

可以注意到/error/document/这个url,它就会通过routing匹配到前面的error.py中的document方法。上面这是error的“来龙”。它的“去脉”呢?
作为pylonshq.com站点来说,它的错误处理要求统一,所以它比默认的模板进行了小的调整:如果是http的错误状态是404,即”没有找到“

if str(ARGS.get('code')) == '404':
       c.referer = request.environ.get('HTTP_REFERER')
       m.subexec('/errors/404.myt')

它获取错误状态的方式是ARGS.get('code'),ARGS是myghty中一个特殊全局变量,它是一个字典类型。
HTTP_REFERER是这次点击的页面之前的链接来源。从而在404.myt中显示,返回。
错误状态是其它的话,

c.code = ARGS.get('code')
c.message = ARGS.get('message')
m.subexec('/errors/generic.myt')

generic.myt的内容也很简单:

<h1 id="error">Error <% c.code | h %></h1>
<p><% c.message | h %></p>

很奇怪的是其中的h,不知道这样执行h,其中的含义是什么?心存疑惑。


评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定