जवाबों:
हालांकि अर्मिन ने मुझे एक स्वीकृत जवाब के साथ पंच के लिए हराया, मुझे लगा कि मैं इस बात का संक्षिप्त उदाहरण दिखाऊंगा कि कैसे मैंने फ्लास्क में एक रेगेक्स मैचर को लागू किया, अगर किसी को काम करने का उदाहरण चाहिए तो यह कैसे हो सकता है।
from flask import Flask
from werkzeug.routing import BaseConverter
app = Flask(__name__)
class RegexConverter(BaseConverter):
def __init__(self, url_map, *items):
super(RegexConverter, self).__init__(url_map)
self.regex = items[0]
app.url_map.converters['regex'] = RegexConverter
@app.route('/<regex("[abcABC0-9]{4,6}"):uid>-<slug>/')
def example(uid, slug):
return "uid: %s, slug: %s" % (uid, slug)
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5000)
यह URL 200 के साथ वापस आ जाना चाहिए: http: // localhost: 5000 / abc0-foo /
यह URL 404: http: // localhost: 5000 / abcd-foo / के साथ वापस आ जाएगा।
self.regex
, लेकिन मैच कहाँ होता है?
आप कस्टम कन्वर्टर्स में हुक कर सकते हैं जो मनमानी अभिव्यक्तियों के लिए मेल खाते हैं: कस्टम कनवर्टर
from random import randrange
from werkzeug.routing import Rule, Map, BaseConverter, ValidationError
class BooleanConverter(BaseConverter):
def __init__(self, url_map, randomify=False):
super(BooleanConverter, self).__init__(url_map)
self.randomify = randomify
self.regex = '(?:yes|no|maybe)'
def to_python(self, value):
if value == 'maybe':
if self.randomify:
return not randrange(2)
raise ValidationError()
return value == 'yes'
def to_url(self, value):
return value and 'yes' or 'no'
url_map = Map([
Rule('/vote/<bool:werkzeug_rocks>', endpoint='vote'),
Rule('/vote/<bool(randomify=True):foo>', endpoint='foo')
], converters={'bool': BooleanConverter})
to_python
करता है
आप सभी प्रकार के मार्ग को भी पकड़ सकते हैं और विधि के भीतर जटिल मार्ग कर सकते हैं:
from flask import Flask
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'], defaults={'path': ''})
@app.route('/<path:path>', methods=['GET', 'POST'])
def catch_all(path):
return 'You want path: %s' % path
if __name__ == '__main__':
app.run()
यह किसी भी अनुरोध से मेल खाएगा। अधिक विवरण यहां देखें: कैच-ऑल URL ।