Xem câu trả lời khác của tôi cho cùng một câu hỏi: https://stackoverflow.com/a/17146563/880326.
Hình như giải pháp tốt nhất là thêm bộ chuyển đổi của riêng bạn và tạo các tuyến đường như
/<poll_key>/close
/<poll_key>/<no(close):participant_key>
nơi no
chuyển đổi được xác định
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
Cập nhật:
Tôi đã bỏ lỡ match_compare_key
:
- cho
static
endpoint: (True, -2, [(0, -6), (1, 200)])
- cho
/<poll_key>/close
: (True, -2, [(1, 100), (0, -5)])
- cho
/<poll_key>/<participant_key>
: (True, -2, [(1, 100), (1, 100)])
Điều này có nghĩa rằng static
có ưu tiên cao hơn những người khác và close
có ưu tiên cao hơn <participant_key>
.
Ví dụ:
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
đầu ra này:
close {'poll_key': u'example-poll-key'}
p_key {'participant_key': u'example-participant-key', 'poll_key': u'example-poll-key'}
Hình như đây là hành vi đúng.
Thử tạo mẫu tuyến tĩnh trước khung động. Có vẻ như thứ tự quan trọng. – zhangyangyu