[pyar] [Django][Consulta] Redirigir si el usuario se encuentra logueado
Sebastián Seba
ssebastianj en gmail.com
Jue Mayo 22 11:22:45 ART 2014
El 22 de mayo de 2014, 8:57, Martin Chikilian <slacklinucs en gmail.com>escribió:
> Claro, creo que lo que él necesita hacer es que si el usuario que vino a
> su guest-only view está ya loggeado que lo devuelva al referrer URL.
> Calculo que usar el header de referrer está bien en ese caso aunque no
> estoy seguro de si es buena práctica, por otro lado no puedo pensar ahora
> en otras alternativas.
>
>
> 2014-05-22 5:14 GMT-03:00 Alejandro Santos <listas en alejolp.com>:
>
> El decorador user_passes_test toma un segundo parametro opcional,
>> login_url, que es la url cuando falla el test:
>>
>>
>> https://docs.djangoproject.com/en/1.5/topics/auth/default/#django.contrib.auth.decorators.user_passes_test
>>
>> Para sacar la URL de tu vista actual podés usar reverse:
>>
>> https://docs.djangoproject.com/en/1.5/ref/urlresolvers/#reverse
>>
>> Seguramente tengas que usar reverse_lazy, probalo,
>>
>> https://docs.djangoproject.com/en/1.5/ref/urlresolvers/#reverse-lazy
>>
>>
>>
>>
>> 2014-05-22 2:34 GMT+02:00 Sebastián Seba <ssebastianj en gmail.com>:
>> > El 21 de mayo de 2014, 20:52, Martin Chikilian <slacklinucs en gmail.com>
>> > escribió:
>> >
>> >> Hola!
>> >>
>> >> Se me ocurre:
>> >>
>> >> from django.contrib.auth.decorators import user_passes_test
>> >>
>> >> @user_passes_test(lambda user: not user.is_authenticated())
>> >> def my_guests_only_view(request):
>> >> ...
>> >>
>> >> See
>> >>
>> https://docs.djangoproject.com/en/1.7/topics/auth/default/#django.contrib.auth.decorators.user_passes_test
>> >>
>> >>
>> >> 2014-05-21 20:14 GMT-03:00 Sebastián Seba <ssebastianj en gmail.com>:
>> >>>
>> >>> ¡Buenas lista! Recurro a su sabiduría para lo siguiente:
>> >>>
>> >>> Necesito "algo" que haga lo contrario al decorador @login_required de
>> >>> Django, es decir, que al momento de realizar una request hacia una
>> view
>> >>> dada, si el usuario ya se encuentra logueado en el sistema, sea
>> redirigido a
>> >>> la vista desde la cual realizó la request.
>> >>>
>> >>> ¿Casos de uso? El primero es que si el usuario se dirige a la vista de
>> >>> login y ya está logueado, no muestre el form de login y lo redirija.
>> Los
>> >>> otros casos son vistas que quiero que sean visualizadas sólo por
>> usuarios no
>> >>> logueados.
>> >>>
>> >>> ¿Cómo lo harían? ¿ya existe algo para eso? ¿cómo lo harían con un
>> >>> decorador?
>> >>>
>> >>> ¡Saludetes!
>> >>>
>> >>> _______________________________________________
>> >>> pyar mailing list pyar en python.org.ar
>> >>> http://listas.python.org.ar/listinfo/pyar
>> >>>
>> >>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>> >>>
>> >>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> >>> Argentina - http://www.usla.org.ar
>> >>
>> >>
>> >>
>> >> _______________________________________________
>> >> pyar mailing list pyar en python.org.ar
>> >> http://listas.python.org.ar/listinfo/pyar
>> >>
>> >> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>> >>
>> >> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> >> Argentina - http://www.usla.org.ar
>> >
>> >
>> > A) ¡Hola Mati! Acabo de probar lo que comentaste y lo que sucede es que
>> se
>> > produce un bucle infinito de redirecciones hacia la view de login.
>> >
>> > Ejemplo:
>> >
>> > 1) Estoy en el home del sitio y hago click en "Iniciar sesión" y me
>> redirige
>> > hacia la view de Login.
>> > 2) Completo con los datos de acceso, los envío y me redirige hacia el
>> home
>> > nuevamente. (Hasta acá todo bien)
>> > 3) Estoy en el home y hago click (por poner un ejemplo) en "Ir a
>> contacto".
>> > Me redirige a la view de Contacto.
>> > 4) La view de Contacto debe ser accedida por usuarios no logueados pero
>> en
>> > este punto ya estoy logueado, por lo que me redirige nuevamente a la
>> view de
>> > Login.
>> > 5) Se produce un bucle de redirecciones hacia la view Login... Firefox
>> llora
>> >
>> > B) Viendo la documentación que me pasaste una opción hacky que podría
>> probar
>> > es usar el parámetro "login_url" del decorador @user_passes_test para
>> hacer
>> > la redirección.
>> > Surge otra duda: ¿es correcto usar request.META.get('HTTP_REFERER')? Lo
>> que
>> > quiero es que lo reenvíe al usuario desde donde vino.
>> >
>> >
>> > _______________________________________________
>> > pyar mailing list pyar en python.org.ar
>> > http://listas.python.org.ar/listinfo/pyar
>> >
>> > PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>> >
>> > La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> > Argentina - http://www.usla.org.ar
>>
>>
>>
>> --
>> Alejandro Santos
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>>
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
¡Buenas de nuevo!
Ale, me fijé la documentación que pasaste y si entendí bien no se ajusta al
escenario con el que estoy laburando :(
Exacto, tiene que hacer como lo último que comentó Martín.
UPDATE: anoche investigando el código de Django (y como a veces soy de
complicarme) llegué a un "intento" de decorador[0] que me resolvió el
dilema.
Funciona tanto en la view de Login como en las que necesito
que se redirija al usuario si está logueado.
Agradecería si pudieran pegarle una mirada al código (quick
& dirty, por el momento) y aconsejarme algunas buenas prácticas =D
Mientras tanto, gracias por las sugerencias.
[0] https://gist.github.com/ssebastianj/5cd45293fd6da6cddd41
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20140522/ff657b8b/attachment.html>
More information about the pyar
mailing list