Flask入门学习——自定义一个url转换器

      我们知道,flask的url规则是可以添加变量部分的,这个参数变量是写在尖括号里的,比如:/item/<id>/,如果需要指出参数的类型要符合<converter:vaiable_name>格式的,其中,converter有几种类型:

  • string:接受不含有‘/’的文本
  • int:接受整数
  • float:接受浮点型
  • path:接受含有‘/’的文本串
  • uuid:只接受uuid串

而当没有符合的转换器时,就需要自己定义一个转换器供我们使用,完成它只需要三步:

1.自定义转换器
2.将自定义的转换器添加到flask的应用中
3.使用转换器

现在,定义一个类似127.0.0.1:5000/flask+aaa这样的。

import urllib.parse as par

from flask import Flask
from werkzeug.routing import BaseConverter

app = Flask(__name__)


# 1.自定义转换器
class ListConverter(BaseConverter):

    def __init__(self, url_map, separator='+'):
        super(ListConverter, self).__init__(url_map)  # 调用父类的构造方法
        self.separator = par.unquote(separator)  # 将自定义转换器参数保存在对象的属性中,flask回去使用这个

    def to_python(self, value):
        return value.split(self.separator)

    def to_url(self, values):
        return self.separator.join(super(BaseConverter, self).to_url(value) for value in values)

# 2.将自定义的转换器添加到flask的应用中
app.url_map.converters['list'] = ListConverter


# 3.使用
@app.route('/list1/<list:page_names>/')
def list1(page_names):
    return 'Separator: {} {}'.format('+', page_names)

# 3.使用
@app.route('/list2/<list(separator=u"|"):page_names>/')
def list2(page_names):
    return 'Separator: {} {}'.format('|', page_names)


if __name__ == '__main__':
    app.run(debug=True)

      当我们访问http://127.0.0.1:5000/list1/a+b/http://127.0.0.1:5000/list1/a|b/就能实现同样的功能了。要注意:自定义转换器需要继承自BaseConverter类,并且设置to_python(把路径转换成一个Python对象)和to_url(把参数转换成符合url的格式)两个方法。

转载于:https://www.cnblogs.com/sirxy/p/11218595.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值