dmo*_*nch 7 python pattern-matching flask
鉴于Flask Routes从上到下没有模式匹配,如何处理以下问题?
我有以下路线:
/<poll_key>/close/<poll_key>/<participant_key>如果我发出请求http://localhost:5000/example-poll-key/close,Flask将其与模式2匹配,则将字符串'close'指定给<participant_key>URL参数.如何在<poll_key>/close路线前使<participant_key>路线匹配?
看到我对相同问题的其他答案:https : //stackoverflow.com/a/17146563/880326。
看起来最好的解决方案是添加您自己的转换器并创建路由
/<poll_key>/close
/<poll_key>/<no(close):participant_key>
Run Code Online (Sandbox Code Playgroud)
其中no转换器定义
class NoConverter(BaseConverter):
def __init__(self, map, *items):
BaseConverter.__init__(self, map)
self.items = items
def to_python(self, value):
if value in self.items:
raise ValidationError()
return value
Run Code Online (Sandbox Code Playgroud)
更新:
我错过了match_compare_key:
static端点:(True, -2, [(0, -6), (1, 200)])/<poll_key>/close:(True, -2, [(1, 100), (0, -5)])/<poll_key>/<participant_key>:(True, -2, [(1, 100), (1, 100)])这意味着它static具有比其他优先级更高的优先级,并且close具有更高的优先级<participant_key>。
例:
from flask import Flask
app = Flask(__name__)
app.add_url_rule('/<poll_key>/close', 'close',
lambda **kwargs: 'close\t' + str(kwargs))
app.add_url_rule('/<poll_key>/<participant_key>', 'p_key',
lambda **kwargs: 'p_key\t' + str(kwargs))
client = app.test_client()
print client.get('/example-poll-key/close').data
print client.get('/example-poll-key/example-participant-key').data
Run Code Online (Sandbox Code Playgroud)
输出:
close {'poll_key': u'example-poll-key'}
p_key {'participant_key': u'example-participant-key', 'poll_key': u'example-poll-key'}
Run Code Online (Sandbox Code Playgroud)
看起来这是正确的行为。
| 归档时间: |
|
| 查看次数: |
7296 次 |
| 最近记录: |