aber noch eine frage zu meiner (durch viel vodooo magie funktionierenden) Variante (angepasste django funktion) :
((code gesnipped))
welchen inhalt haben *args, **kwargs und was ist view_func (ich werde auf die richtige seite weitergeleitet, aber ich hab nirgendsd view_func als redirect definiert....??)
ei, das beispiel, was du da hast, ist ziemlich magisch
. Da soll der Graham nochmal von Lisps überragender Metaprogrammierung labern...
Erst noch kurz, zum einfacheren Beschreiben:
ist nur eine andere Art, dies hier zu schreiben:
Ok, zum eigentlichen Problem, fangen wir mal hinten an.
"login_required" soll ein Dekorator sein, den wir im stil
Code: Alles auswählen
@login_required
def meine_geheime_seite(request, a, b):
#...
nutzen wollen.
Also muss user_passes_test(..) einen Dekorator zurückliefern. "user_passes_test" ist also quasi ein dekorator-generator.
Gucken wir uns also user_passes_test an: user_passes_test definiert eine Funktion _dec (den Dekorator), der zurückgegeben wird.
Der Dekorator _dec tauscht die eigentliche view_func (also in meinem beispiel z.B. "meine_geheime_seite") gegen eine eigene Funktion aus, nämlich die Funktion _checklogin.
Diese Funktion, die nun anstelle der eigentlichen view_func steht, überprüft anhand der test_func, on sie den user umeilten soll (HttpResponseRedirect), oder doch die eigentliche view aufrufen möchte.
somit heist die zeile:
Code: Alles auswählen
login_required = user_passes_test(lambda u: u.is_active())
in umgangssprache: "erstelle einen Dekorator, der anhand der Funktion 'lambda u: u.is_active()' entscheidet, ob er die eigentliche View zeigen soll oder umleiten, und nenne diesen Dekorator user_passes_test
wäre auch für dokumentationslinks dankbar... (bin leider noch kein richtiger python profi (kenne nur die basics..... und auch keine django guru....)
Wenn du dekoratoren halbwegs verstanden hast, hasst du schon einen recht beachtlichen Weg geschafft.[/code]