2017-04-05 3 views
0

Ich versuche, zusätzliche Schlüsselwortoptionen an eine Funktion zu übergeben, die bei Flasks add_url_rule registriert ist. Hier ist der Code, den ich versuche zu verwenden:Flask `add_url_rule` Optionsargument fügt keine zusätzlichen Schlüsselwortoptionen hinzu

import flask 
APP = flask.Flask(__name__) 
APP.add_url_rule('/', 'get_all', routes.get_all, class_name='Entity') 

Dies ist der Fehler, den ich erhalte.

Traceback (most recent call last): 
File "src/main.py", line 118, in <module> 
    class_name='Entity') 
File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 64, in wrapper_func 
    return f(self, *args, **kwargs) 
File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1043, in add_url_rule 
    rule = self.url_rule_class(rule, methods=methods, **options) 
TypeError: __init__() got an unexpected keyword argument 'class_name' 

auf der Dokumentations-Based, dachte ich, dass all zusätzlicher Schlüsselwort Parameter routes.get_all unter dem options Parameter im Funktionsaufruf enthalten würde. Dies scheint nicht der Fall zu sein.

Dies ist ähnlich, aber nicht dasselbe wie Flask add_url_rule with options throws unexpected keyword argument.

Kann jemand bitte erklären, wie man willkürliche Parameter zu der Funktion gibt, die durch die add_url_rule Kolbenmethode verbunden wird?

Antwort

0

Optionen - die Optionen, die an das zugrunde liegende Rule-Objekt weitergeleitet werden sollen. Ein Wechsel zu Werkzeug ist die Handhabung von Methodenoptionen. Methoden ist eine Liste von Methoden, auf die diese Regel beschränkt werden soll (GET, POST usw.). Standardmäßig wartet eine Regel nur auf GET (und implizit auf HEAD). Beginnend mit Flask 0.6 wird OPTIONS implizit hinzugefügt und von der Standard-Request-Behandlung behandelt.

Sie können Methode dazu senden:

APP.add_url_rule('/', 'get_all', routes.get_all, methods=["POST", "POST", "PUT"]) 

Bitte beachten Sie die Umsetzung dieses Code: add_url_rule

Auch können Sie Ihre Möglichkeiten mit defaults in einem dict wie this senden.

Ihre params geht an url_rule_class-Funktion (siehe this):

rule = self.url_rule_class(rule, methods=methods, **options) 

und dies jetzt sehen:

Sie irgendetwas davon params als Optionen verwenden können, nichts anderes!

class werkzeug.routing.Rule(string, defaults=None, subdomain=None, methods=None, build_only=False, endpoint=None, strict_slashes=None, redirect_to=None, alias=False, host=None) 

Siehe werkzeug.routing.Rule

+0

auf dieser Dokumentation So basiert und den Code, so scheint es, dass 'options', die nicht' methods' sind ignoriert werden? Warum würde das Hinzufügen von 'class_name' dann einen Fehler auslösen? –

+0

@NicholasTulachIch habe versucht, deine Frage zu beantworten, ich habe meine Antwort aktualisiert. – RaminNietzsche

+0

Ich denke, die Verwendung von 'defaults' wird für meine Bedürfnisse funktionieren. Vielen Dank! –

Verwandte Themen