Frage

Ich habe eine Situation, die Umleitung Benutzer, die von der Login-Seite zu einer anderen Seite weg angemeldet sind bereits erfordert. Ich habe erwähnt gesehen, dass dies mit Dekorateure erreicht werden, was Sinn macht, aber ich bin ziemlich neu, sie zu verwenden. Aber ich bin mit dem django Login und einer Dritten Ansicht (von django-Registrierung). Ich will nicht den Code in django.contrib.auth oder django-Registrierung ändern. Wie kann ich einen Dekorateur auf eine Ansicht anwenden, die nicht zu modifizierenden ist, um das gewünschte Verhalten zu erhalten.

Vielen Dank im Voraus!

UPDATE: Ich entdeckte, dass ich aus Versehen die Login-Funktion mit dem Registrierungsmodul verbunden. django-Registrierung hat nichts mit diesem Thema zu tun. Ich brauche aber noch in der Lage sein, Standard-Login () Verhalten außer Kraft zu setzen. Irgendwelche Gedanken?

War es hilfreich?

Lösung

Drei weitere Möglichkeiten, es zu tun, wenn Sie Ihre eigenen URLconf für diese benötigen, um zu verwenden:

  1. Fügen Sie den Dekorateur der Ansicht direkt in der URLconf:

    ...
    (regexp, decorator(view)),
    ...
    

    Sie müssen die Ansicht und den Dekorateur in die URLconf obwohl importieren, weshalb ich diese nicht mag. Ich ziehe es so wenige Importe in meiner urls.py der wie möglich haben.

  2. Importieren Sie die Ansicht in eine <app>/views.py und fügen Sie den Dekorateur es:

    import view
    
    view = decorator(view)
    

    Ziemlich genau wie Vinays Methode allerdings noch deutlicher, da Sie eine URLconf dafür benötigen.

  3. den Blick in einer neuen Ansicht Wrap:

    import view
    
    @decorator
    def wrapperview(request, *args, **kwargs):
        ... other stuff ...
        return view(request, *args, **kwargs)
    

    Die letzte ist sehr praktisch, wenn Sie generische Ansichten ändern. Dies ist, was ich oft sowieso am Ende tun.

Wenn Sie eine URLconf verwenden, um von Mustern Rolle, so dass Sie auf der Möglicherweise müssen mischen um Muster zuerst aufgerufen werden.

Andere Tipps

Wenn Sie die Dekorateur Funktion haben und Sie wissen, was in django-Registrierung sehen Sie dekorieren möchten, können Sie einfach tun,

registration.view_func = decorator_func(registration.view_func)

wo registration ist das Modul in django-Registrierung, die die Ansicht Funktion, die Sie dekorieren möchten enthält, view_func ist die Ansicht Funktion, die Sie dekorieren möchten, und decorator_func ist der Dekorateur.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top