In einem Dritt Rahmen zu verlieren Quellen Antwortfunktion wie folgt gewickelt:Fügen Sie einen zweiten Rückgabewert eine eingewickelt Funktion ohne Abwärtskompatibilität
from flask import Response
def wrap_func(func):
def add_context(*args, **kwargs):
output_value = func(*args, **kwargs)
return Response(
output_value
)
return add_context
und Entwickler können diese Dekorateur verwenden, um eine benutzerdefinierte Funktion etwas zu machen wie ein Einstiegspunkt:
@wrap_function
def hello():
return '<b>Hello</b>'
Rahmen schafft eine Antwort und senden sie es, diese Funktionalität versteckt „unter der Haube“.
Und jetzt muss ich einige Response
Parameter wie Cookies von meiner Funktion hello
setzen. Da es ohne die Wrapper-Änderungen unmöglich zu sein scheint, habe ich beschlossen, zum Framework beizutragen.
Meine allererste war aber, einen optionalen Wert von Wrapped-Funktion (hello
) mit Antwort-Parameter zurückgeben und dann innerhalb add_context
zu analysieren. Beachten Sie, dass Rückwärtskompatibilität wichtig ist, "alte" Funktionen sollten genauso funktionieren wie "neu" mit Antwortparametern. Also, neben mit hello
würde Wrapper Funktionen wie diese unterstützen:
@wrap_function
def ping():
return '<b>Hello</b>', {'cookies': [('te', 'st')]}
Aber für mich ist es auf jeden Fall ein Hack Job. Vielleicht gibt es einige Best Practices, um eine solche Änderung zu implementieren, oder sogar einen besseren Ansatz, um die Rückgabe der Wrapped-Funktion zu modifizieren, ohne die Kompatibilität zu verlieren?