首页 > 代码库 > flask url转换器,添加另类的url

flask url转换器,添加另类的url

import urllibfrom flask import Flaskfrom werkzeug.routing import BaseConverterapp = Flask(__name__)class ListConverter(BaseConverter):    def __init__(self, url_map, separator="+"):        super(ListConverter, self).__init__(url_map)        self.separator = urllib.unquote(separator)    def to_python(self, value):        return value.split(self.separator)    def to_url(self, values):        return self.separator.join(BaseConverter.to_url(value)         	                         for value in values)‘‘‘app.url_map.converters{‘default‘: <class ‘werkzeug.routing.UnicodeConverter‘>, ‘string‘: <class ‘werkzeug.routing.UnicodeConverter‘>, ‘int‘: <class ‘werkzeug.routing.IntegerConverter‘>, ‘path‘: <class ‘werkzeug.routing.PathConverter‘>, ‘float‘: <class ‘werkzeug.routing.FloatConverter‘>, ‘any‘: <class ‘werkzeug.routing.AnyConverter‘>, ‘uuid‘: <class ‘werkzeug.routing.UUIDConverter‘>}‘‘‘app.url_map.converters[‘list‘] = ListConverter@app.route(‘/list1/<list:page_names>/‘)def list1(page_names):    return ‘Separator: {} {}‘.format("+", page_names)@app.route(‘/list2/<list(separator=u"|"):page_names>/‘)def list2(page_names):    return ‘Separator: {} {}‘.format("|", page_names)if __name__ == "__main__":	app.run()

http://127.0.0.1:5000/list1/a+b/

Separator: + [u‘a‘, u‘b‘]

http://127.0.0.1:5000/list2/a|b/

Separator: | [u‘a‘, u‘b‘]

 自定义转换器需要集成BaseConverter,实现to_python和to_url两个方法

to_python:将路径转化为一个Python对象

to_url:      将路径转化为符合URL格式

摘自《Python Web开发实战》

flask url转换器,添加另类的url