Vedere di seguito, che è un codice (che ho ridotto) from the Flask app object. Questo codice gestisce l'aggiunta di una regola di URL (che è anche quello che viene chiamato dal pallone quando lo si fa app.route() sulla vista) ....
@setupmethod
def add_url_rule(self, rule, endpoint=None, view_func=None, **options):
""" I remove a ton the documentation here.... """
if endpoint is None:
endpoint = _endpoint_from_view_func(view_func)
options['endpoint'] = endpoint
methods = options.pop('methods', None)
# if the methods are not given and the view_func object knows its
# methods we can use that instead. If neither exists, we go with
# a tuple of only `GET` as default.
if methods is None:
methods = getattr(view_func, 'methods', None) or ('GET',)
methods = set(methods)
# ... SNIP a bunch more code...
rule = self.url_rule_class(rule, methods=methods, **options)
rule.provide_automatic_options = provide_automatic_options
self.url_map.add(rule)
Come si può vedere, Flask farà è darndest a assicurarsi che i metodi siano definiti in modo esplicito. Ora, Flask si basa su Werkzeug, e la linea ...
rule = self.url_rule_class(rule, methods=methods, **options)
... tipicamente utilizza Werkzeug's Rule classe. Questa classe ha la seguente documentazione per l'argomento "metodi" ...
Una sequenza di metodi http a cui si applica questa regola. Se non specificato, tutti i metodi sono consentiti.
Quindi, questo mi dice che si potrebbe essere in grado di fare qualcosa di simile alla seguente ...
from werkzeug.routing import Rule
app = Flask(__name__)
def my_rule_wrapper(rule, **kwargs):
kwargs['methods'] = None
return Rule(rule, **kwargs)
app.url_rule_class = my_rule_wrapper
non ho ancora testato questo fuori, ma si spera che si può ottenere sulla strada giusta .
Edit:
Oppure si potrebbe usare la risposta di DazWorrall, che sembra meglio: P
Cambiare la url_rule_class funzionerà bene :) Probabilmente è più pulito se si desidera aprire molti (o tutti) percorsi fino a qualsiasi metodo. – DazWorrall