webpy的url动态匹配

因为看过django的url匹配功能,发现其模块耦合性的设计非常好,而之前用webpy写的一个工具,因为后来不断的添加功能导致产生N多的url匹配;所以就想看看webpy有没有这个功能可以简化一下url的匹配,还有就是分离url和实际处理模块之间的耦合度。

百度查了一下,结果不好使,webpy用的人本来就少,可恨google是没法用,最后只有直接去看看是否能解决问题。好就好在按照django乱配了一通后有报错,跟着报错找到了具体的处理url的位置,稍微看了下源码;貌似这块处理还比较简单的,所以就是试了一下。得知webpy也可以支持url跳转配置,不过要用关键字,想要动态根据url的内容来映射对应的处理类,默认是没有的,不过只要稍微添加一行代码就可以添加一个简易的此类功能。具体如下:

在url中配置跳转:

urls = (
        
    '^/seleniumdoc/$',                               'redirect /seleniumdoc/index', 
    
)
使用的是redirect关键字,后面是空格再加药跳转的地址。

在url中动态映射到处理类:

1、修改webpy的源码文件【site-packages/web/application.py】403行后添加一句处理语句

402                raise web.redirect(url)
403           elif '.' in f:
404                f = f % tuple(args)  ##这句是添加的
405                mod, cls = f.rsplit('.', 1)
2、在url中配置格式如下:

urls = (
        
    '^/pythonapi/([^/]+)$',                        pre_fix + 'pythonapi.%s', 
    
)
这样在执行是就会把url中匹配的内容传给了对应的字符串占位符%s;不过这个有一个不好就是必须是顺序的,不能打乱顺序,想要像django那样的匹配就需要更多的处理了。就要添加带索引的占位符,或者用键值;在处理函数中替换这些占位符为对应的url正则匹配到的内容。稍微多处理了一下,不过在需要的时候,添加这个功能还是有必要的。



你可能感兴趣的:(url,webpy,动态匹配)