用于十六进制颜色代码的瓶通配符过滤器

时间:2016-11-30 15:01:41

标签: python rest filter bottle

我正在尝试为我的瓶子应用程序添加十六进制颜色代码的过滤器(应采用类似:0xFF0000或FF0000的格式)。

我按照这个瓶子教程https://bottlepy.org/docs/dev/routing.html

  

您可以将自己的过滤器添加到路由器。你需要的只是一个返回三个元素的函数:一个正则表达式字符串,一个用于将URL片段转换为python值的callable,以及一个相反的callable。使用配置字符串作为唯一参数调用过滤器函数,并可根据需要对其进行解析:

但每当我打电话给我的职能时:

@app.route('/<color:hexa>')
def call(color):
....

我收到了404:

Not found: '/0x0000FF'

也许我是盲人但我不知道自己错过了什么。这是我的过滤器:

def hexa_filter(config):
    regexp = r'^(0[xX])?[a-fA-F0-9]+$'

    def to_python(match):
        return int(match, 0)


    def to_url(hexNum):
        return str(hexNum)

    return regexp, to_python, to_url

app.router.add_filter('hexa', hexa_filter)

1 个答案:

答案 0 :(得分:0)

问题导致^(最终$)。

你的正则表达式可以用作检查完整网址的更大正则表达式的一部分 - 所以^(有时$)在更大的正则表达式中是没有意义的。

from bottle import *

app = Bottle()

def hexa_filter(config):
    regexp = r'(0[xX])?[a-fA-F0-9]+'

    def to_python(match):
        return int(match, 16)

    def to_url(hexNum):
        return str(hexNum)

    return regexp, to_python, to_url

app.router.add_filter('hexa', hexa_filter)

@app.route('/<color:hexa>')
def call(color):
    return 'color: ' + str(color)

app.run(host='localhost', port=8000)