widgets formularios form fields example avanzados python django django-forms

python - formularios - modelform django



El parĂ¡metro "siguiente", redirigir, django.contrib.auth.login (6)

Intento redirigir a los usuarios a url personalizado "/ gallery / (nombre de usuario) /" después de iniciar sesión con éxito. Actualmente redirige al valor predeterminado "/ cuenta / perfil /". Aunque sé qué puedo anular, la URL de redirección en mi configuración .py, mi URL es dinámica por lo que no funcionará.

La documentación indica que necesito usar el "próximo" parámetro y los procesadores de contexto. Tengo el {{next}} en mi plantilla, pero estoy confundido sobre cómo pasar realmente "/ gallery / (username)". Cualquier ayuda sería muy apreciada.

ps Estoy tratando de alejarme de escribir mi propia vista de inicio de sesión.


Confieso que usualmente uso 2 redireccionamientos para hacer que algo como esto funcione.

Primero, registration/login.html tu propia página de registration/login.html inicio de registration/login.html . Puede copiar y pegar el ejemplo html en esta sección de los documentos de autenticación para facilitar el proceso. En lugar de utilizar la variable dinámica ''{{ next }} del contexto, sin embargo, conecte el valor de next para ir a una vista de aterrizaje genérica de los usuarios que hayan iniciado sesión.

<input type="submit" value="login" /> <input type="hidden" name="next" value="/gallery/" />

Luego, en la vista que asigna a /gallery/ URL, extraiga el objeto User de la solicitud (ya que el usuario ahora iniciará sesión, especialmente si la vista de la galería está envuelta en un decorador @permission_required o @login_required . Use eso ver para redirigir a la página de la galería específica del usuario apropiada:

@login_required def gallery(request): url = ''/gallery/%s/'' % request.user.username return HttpResponseRedirect(url)


Puede usar una redirección estática a /loggedin/ y luego asociar la url a una vista que hace la redirección correcta.

Iniciar sesión da un paso extra, pero si desea usar la vista de django, hace el trabajo.


Si ya tiene la plantilla personalizada para el formulario de inicio de sesión, debe agregar lo siguiente dentro de su etiqueta <form> :

<input type="hidden" name="next" value="{{next}}" />

Por cierto, no tienes que crear tu propia vista de inicio de sesión. django.contrib.auth.views.login funciona bien. Solo necesita crear una plantilla para ello ( registration/login.html )


crea tu propia vista para iniciar sesión, con su propia URL, no uses la del administrador. puede almacenar la siguiente página en la sesión, o pasarla como un parámetro GET a la vista de inicio de sesión (es decir, / login? next = gallery) simplemente no se olvide de desinfectar y validar ese valor antes de redireccionar a la misma.


ser un novato en django y tropezar con este hilo un poco más viejo encontré una solución diferente para el problema de dinámicamente (= anular un valor predeterminado personalizado solo si es necesario) configurando el siguiente parámetro que me gustaría compartir (funciona bien con django 1.5 , versiones anteriores no probadas):

del mismo modo que django-d quería evitar la repetición y una vista de inicio de sesión personalizada, utilicé el archivo django.contrib.auth.views.login -view agregando la línea de

url(r''^login/$'', ''django.contrib.auth.views.login'', {''template_name'': ''myapp/login.html'',}, name=''login''),

a mi urls.py y dentro del elemento de formulario login.html-templates:

{% if not next or not next.strip %} {# avoid django.contrib.auth.views.login s default of /account/profile/ #} {% url ''afterlogindefaultview'' as next %} {% endif %} <input type="hidden" name="next" value="{{ next }}" />

lo que a mi entender sigue la práctica de desacoplamiento de las configuraciones de url desde los puntos de vista. así que para las vistas que deberían redirigir a mi inicio de sesión de aplicaciones y luego dirigirse a una vista no predeterminada que uso

return HttpResponseRedirect(''%s?next=%s'' % (reverse(''login''), reverse(''mycustomnext'')) )

desde la vista en la que quiero que el usuario inicie sesión. Lo uso para volver a la vista donde la dejé para registrar al usuario.


La vista de inicio de sesión de Django django.contrib.auth.views.login acepta un diccionario llamado extra_context . Los valores en el diccionario se pasan directamente a la plantilla. Entonces puede usar eso para establecer el next parámetro. Una vez hecho esto, puede establecer un campo oculto con el nombre next y el valor {{ next }} para que se represente en la plantilla.