在烧瓶中使用regex restre api route url

时间:2015-12-01 20:42:06

标签: python regex rest flask

我正在尝试为flask api添加基于正则表达式的url。但它似乎不起作用。我也无法在文档上找到解决方案。

scheduler_blueprint = Blueprint('scheduling_api', __name__)
api = TalentApi()
api.init_app(scheduler_blueprint)
api.route = types.MethodType(api_route, api)

@api.route('/tasks/<string:id>')
class TaskById(Resource):
....

@api.route('/tasks/resume/')
class ResumeTasks(Resource):
....

其中string:id应该是'resume'以外的哈希值 据我所知,正则表达式是我在此场景中唯一可以用来消除这种冲突的东西。 我如何在网址 中使用正则表达式进行烧瓶休息api

1 个答案:

答案 0 :(得分:2)

编写一个识别32个十六进制字符的custom url converter。使用应用程序注册转换器并在路径中使用它。

from werkzeug.routing import BaseConverter

class TaskIDConverter(BaseConverter):
    regex = r'[A-Fa-f0-9]{32}'

# register the converter when creating the app
app = Flask(__name__)
app.url_map.converters['task_id'] = TaskIDConverter

# use the converter in the route
@app.route('/user/<task_id:id>')
def process_user(id):
    ...

# will recognize /user/0123456789abcdef0123456789abcdef
# will 404 on /user/123, /user/123abc456, etc.

如果id实际上是一个int,而不是恰好只有数字的字符串,请改用以下转换器。它将值转换为int,并确保该值不以0开头,这将导致int中的数字少于32位。

class TaskIDConverter(BaseConverter):
    regex = r'[1-9]\d{31,}'

    def to_python(self, value):
        return int(value)

    def to_url(self, value):
        return str(value)