Pregunta

Tengo una situación que requiere de redirigir a los usuarios que ya están registrados fuera de la página de inicio de sesión a otra página.He visto mencionar que esto se puede lograr con decoradores que tiene sentido, pero soy bastante nuevo en el uso de ellos.Sin embargo, estoy utilizando el django de inicio de sesión y una tercera parte de la vista (de django-registro).No quiero cambiar el código en django.contrib.auth o django-registro.¿Cómo puedo solicitar un decorador para una vista que no es para ser modificados a fin de obtener el comportamiento deseado.

Gracias de antemano!

ACTUALIZACIÓN:Descubrí que por error asociado a la función de inicio de sesión con el módulo de registro.django-registro no tiene nada que ver con este problema.Sin embargo, todavía necesita ser capaz de anular la configuración predeterminada de inicio de sesión() de la conducta.Los pensamientos?

¿Fue útil?

Solución

Tres maneras de hacerlo, a pesar de que usted necesita para utilizar su propio urlconf para estos:

  1. Agregar el decorador a la vista directamente en la urlconf:

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

    Usted necesita importar la vista y el decorador en la urlconf sin embargo, que es por qué no me gusta este.Yo prefiero tener pocas importaciones en mi urls.py's como sea posible.

  2. Importar la vista en un <app>/views.py y añadir el decorador allí:

    import view
    
    view = decorator(view)
    

    Muy parecido a Vinay del método a pesar de ser más explícito, ya que se necesita una urlconf para ello.

  3. Envuelva la vista en un nuevo punto de vista:

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

    El último es muy útil cuando usted necesita para cambiar genérico vistas.Esto es lo que a menudo terminan haciendo de todos modos.

Cada vez que utilice un urlconf, el orden de los patrones de la materia, por lo que usted puede ser que necesite para posicionarse en el que el patrón se llama primero.

Otros consejos

Si tiene la función de decorador y sabe qué vista en django-Registration desea decorar, simplemente puede hacer

registration.view_func = decorator_func(registration.view_func)

donde registration es el módulo en el registro de django que contiene la función de vista que desea decorar, view_func es la función de vista que desea decorar y decorator_func es el decorador .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top