我正在尝试为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 ?
答案 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)