需求
flask跟web.py差别挺大的,尤其是在路由管理这块。web.py把所有的路由都集中在一起,我比较喜欢这种方式。最近用flask,发现@app.route(‘
方案
通过运行如下代码123456from flask import Flaskfrom pprint import pprintif __name__ == '__main__': app = Flask(__name__) pprint(app.url_map.converters)
可以获取Flask默认支持的转换器
|
|
那如何创建一个新的路由解析转化器呢?
在Flask的app.py里有个简单的例子,这个例子是创建了一个regex类型的路由转换器:
|
|
总结
Flask(其实是Werkzeug)使用Converter把URL中特殊部分(<regex(r"[a-z]\d+$"):user>
)转换为Python变量,通用格式是
因此,converter的regex就是用来判断这串字符是否符合转换格式,ok就转换,否则跳过。对于IntegerConverter来说,”abc”显然无能为力。也就是说,其实Werkzeug的路由本来就支持用正则表达式。string、int、float等都是从它派生出来的(可以看看IntegerConverter等built-in Converter的regex)。
至于为什么不显式地支持,我猜可能是因为正则表达式不容易写好,buggy。