[pyar] [django] Reemplazo de variables en template con render_to_response()

fisa fisadev en gmail.com
Jue Nov 11 00:11:32 ART 2010


2010/11/10 Eugenia Bahit #KittyTux <eugeniabahit en gmail.com>
>
> El 10 de noviembre de 2010 09:48, fisa <fisadev en gmail.com> escribió:
>>
>> Mmmm... el ejemplo es algo distinto a lo que decís, sería bueno que
>> nos pegues el código de lo que está fallando, no de lo que hiciste
>> para intentar solucionarlo, jeje.
>>
>> En el ejemplo que nos pasaste, la vista login no es una vista tuya,
>> sino una de django. Si es así, tu vista login nunca se llama, y por
>> eso es lógico que no suceda nada de lo que vos hacías en tu vista
>> login. Lo que se estaría ejecutando es la vista de django.
>> Me refiero a lo que hacés en el urls.py:
>>  (r'.*accounts/login/$', 'django.contrib.auth.views.login',
>> {'template_name': 'registration/login.html'}),
>>
>> Si en cambio antes tenías una vista login, en las urls apuntabas a tu
>> propia vista login, y realmente es como decís, que era igual a la
>> index, entonces el problema no debería pasar.
>>
>> Y lo del context no creo que pueda ser lo que cause este problema. Si
>> uno pasa datos en el diccionario, esos datos van a estar disponibles
>> en el template, sin importar que se pase o no el request context.
>>
>> --
>> fisa  -  Juan Pedro Fisanotti
>
> Noooooooooo!!!!!!!!! Otra que Susana Giménez!
>
> Lo mío, imprsentable:
> Cuando estaba editando el código[0], para volverlo al modo en el cual, comenté al principio, me di cuenta de que cuando lo probaba, no me reemplazaba las variables porque HABÍA PUESTO DOS URL PARA LOGIN:
> - Una para la vista de mi form
> (r'.*accounts/login/$', 'pos.views.login_form')
>
> - Y otra para que el login (el action, al enviar el form), funcionara:
> (r'.*accounts/login_submit/$', 'django.contrib.auth.views.login', {'template_name': 'registration/login.html'})
>
> Y cada vez que lo probaba, no me reemplazaba las variables, porque SIEMPRE lo probé después de darle a "ENVIAR" (o sea, una vez que se envía, si los datos de logueo son incorrectos, me muestra LA VISTA DE LA SEGUNDA URL, ya que en el action del form, ponía "accounts/login_submit/" y siempre lo probé en esa instancia).
>
> O sea, que el problema que tengo ES OTRO!!! (recuérdenme habilitar el lab del Gmail que antes de enviar un mail, te hace hacer cálculos matemáticos para comprobar el grado de lime cerebral).
>
> Y el problema en cuestión, supongo, que es: si quiero conservar el sistema de login de Django, pero no su vista (es decir, reemplazar la vista del form por una propia) ¿Cuál sería la URL a indicar en el action del form o cómo debería hacerlo? Porque si dejase la URL que configuro en (r'.*accounts/login/$', 'pos.views.login_form'), el formulario se envíaría "a la nada misma" y no funcionaría. O tal vez en login_form() debería "hacer algo" para avisarle a Django "si el usuario envió data, ocupate de loguearlo vos"... no se, voy pensando sobre la marcha ahora, me mareé ¿se entiende algo???
>
>
> [0] El código que comenté al principio está editado en http://pastebin.com/vrCgNwU9
>
>
> --
> F_Eugenia_Bahit {
>     Analista_Programadora()
>     # Dirección General de Sistemas Informáticos
>     # Ministerio de Salud
>     # Gobierno de La Ciudad de Buenos Aires
>         DGSISIN = [
>             Domicilio => Carlos Pellegrini 313, Piso 13 (CABA),
>             Telefono => 4323-9000 Int. 3506/07,
>             E-mail => ebahit en buenosaires.gob.ar]
>
>     LAMP_Developer()
>     # Diseño Web Estandarizado
>     # Desarrollo de Sistemas Informáticos
>         CONTACTO = [
>             Web_Site => www.disenowebestandarizado.com,
>             Mobile => (011) 15 3176-0769]
> }
> Linux User #526541
>
>
> _______________________________________________
> 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/

Hacerte tu propia vista de login no es complicado, basicamente tendrías que:
 * hacer una vista donde:
    * dentro de la vista, loguee al usuario (normalmente en el post).
Info de como hacerlo en [0]
    * si el usuario se logueo correctamente, redireccionar a la url
que recibiste en el parámetro get "next"
 * setear en los settings la LOGIN_URL

Es un poco tricky, en especial por lo del next. El flujo sería básicamente así:
1) el usuario pide una url, ej: "/mi_perfil/"
2) el decorador de login_required ve que la vista que se va a ejecutar
necesita login, y el usuario no esta logueado. Así que redirecciona a
la url: settings.LOGIN_URL + "?next=" + url que se pidió y no se puede
acceder. Si la LOGIN_URL es "/login/", en este caso redireccionaría a
"/login/?next=/mi_perfil/"
3) se ejecuta tu vista de login, como GET, así que mostrarás tu
template de login al usuario.
Pero ojo! Acá es donde recibís el next, no en el POST! Así que tenés
que tener algún mecanismo para que cuando te hagan el POST de login,
"recuerdes" cual era el valor que ahora estás recibiendo en el GET.
Podés ponerlo en el formulario de login, como un campo oculto, es lo
más recomendable.
4) el usuario escribe sus datos, click en logín, se hace un POST a tu
vista de login.
5) tu vista de login ahora llamada desde el POST, hace la
autenticación, y si fue correcta redirecciona a lo que había en el
valor next. En este caso, a "/mi_perfil/". (Si habías puesto el valor
del next en tu formulario, lo vas a estar recibiendo como dato de POST
ahora, lo que es sencillo de leer)
6) ahora la vista original va a poder accederse, porque el usuario ya
está logueado.

Se entiende? Cualquier cosa preguntá.

Peeeero, me queda en el tintero: por qué querés hacer tu propia vista
de login? si es para pasar datos a los templates, seguramente son
datos que tooodas tus vistas pasan, y por ende lo recomendable sería
que lo metas en un context processor. Con el context processor te
ahorrás dos problemas: pasarlos siempre, y hacer tu propia vista de
login :)
Si querés te comento como es eso.

Saludos!

[0] http://docs.djangoproject.com/en/dev/topics/auth/#how-to-log-a-user-in

--
fisa  -  Juan Pedro Fisanotti



More information about the pyar mailing list