2010-05-19 12 views
54

Quiero permitir que un usuario inicie sesión antes de ver páginas. ¿Hay alguna plantilla incorporada para que el usuario inicie sesión, para que no tenga que escribir mi propia página de inicio de sesión?¿Hay una plantilla de inicio de sesión integrada en Django?

+2

'Django proporciona ** ninguna plantilla predeterminada ** para las vistas de autenticación. Debería crear sus propias plantillas para las vistas que quiere usar. ' –

Respuesta

47

Sí. Puede leer todos los detalles aquí: https://docs.djangoproject.com/en/1.8/topics/auth/default/#django.contrib.auth.decorators.login_required ... pero aquí hay algunos puntos de la bala:

  • añadir 'django.contrib.auth.middleware.AuthenticationMiddleware'-MIDDLEWARE_CLASSES en settings.py
  • añadir 'django.contrib.auth 'y 'django.contrib.contenttypes'-INSTALLED_APPS en settings.py
  • configuración de una dirección URL para el inicio de sesión usando django.contrib.auth.views.login para la vista, como url(r'^login/$', 'django.contrib.auth.views.login',name="my_login")
  • En su vista, incluya el decorador login_required y agréguelo antes de su vista. Por ejemplo ...

views.py ...

from django.contrib.auth.decorators import login_required 

@login_required 
def home(request): 
    return HttpResponse('Home Page') 

Por defecto, a continuación, poner la plantilla en el interior my_template_directory/registration/login.html. Se puede encontrar más información sobre esa plantilla en el enlace al comienzo de esta publicación.

+1

Gracias por la información. Obtengo una excepción: TemplateDoesNotExist Sin embargo, existe la página de inicio de sesión de administrador (también de la carpeta de plantillas). – stanleyxu2005

+1

puede pasar un argumento 'template_name': 'path/to/your/template.html' en el urlconf para asegurarse de que está tratando de leer la plantilla desde el lugar correcto –

+0

@ stanleyxu2005 si desea usar la plantilla predeterminada , necesita crearlo en una subcarpeta del directorio de plantillas. – Brant

29

Como se mencionó en los comentarios del autor, la manera más fácil de hacer esto es añadir las siguientes líneas a urls.py:

from django.contrib.auth.views import login, logout 

urlpatterns = patterns('', 
    url(r'^accounts/login/$', login, {'template_name': 'admin/login.html'}), 
    url(r'^accounts/logout/$', logout), 
) 

Por lo que yo sé, la adición de los r'^accounts/$' y r'^accounts/profile/$' URL no es necesario a menos que se requiera la administración del perfil del usuario.

Según lo sugerido por @mmatt en los comentarios, configure LOGIN_REDIRECT_URL = '/' en settings.py para evitar el redireccionamiento predeterminado a /accounts/profile/ después del inicio de sesión. Consulte LOGIN_REDIRECT_URL en la documentación de configuración de Django.

Esto también debería funcionar en Django 2.x usando path en lugar de url de forma adecuada.

+0

Establezca 'LOGIN_REDIRECT_URL = '/'' en su settings.py para redirigir a una página que no sea/accounts/profile. – mehmet

+2

Soporte para argumentos de vista de cadena en 'url()' [se ha eliminado con Django 1.10] (https://docs.djangoproject.com/en/1.11/releases/1.10/#features-removed-in-1-10) . Use 'from import django.contrib.auth.views import login' y' url (r '^ accounts/login/$', login, ... 'en su lugar (y similar para cerrar la sesión). – Evert

+0

Gracias, actualizado. – mrts

4

Si desea tomar una ruta rápida para comenzar a usarlo, le recomiendo usar el URLConf proporcionado.

por ejemplo:

urlpatterns = [ 
    url('^', include('django.contrib.auth.urls')) 
] 

ver más detalles en la documentación de Django: https://docs.djangoproject.com/en/1.8/topics/auth/default/#module-django.contrib.auth.views

+0

Y a plantilla de inicio de sesión de muestra en la misma página; https://docs.djangoproject.com/en/1.8/topics/auth/default/#all-authentication-views Parece que no hay incorporados? Y tampoco registro, se ve como si necesitara un módulo de terceros para eso: https://www.djangopackages.com/grids/g/registration/ –

+0

Autocorrección: algunas vistas tienen plantillas integradas, como 'accounts/password_reset /', others don ' Me gusta 'accounts/login /'. –

7

El más upvoted response por @brant es técnicamente incorrecto. Django provee vistas predeterminadas para manejar la funcionalidad de inicio de sesión, pero por el documentation no proporciona una plantilla:

Django proporciona ninguna plantilla por defecto para las vistas de autenticación. Debe crear sus propias plantillas para las vistas que desea usar. El contexto de la plantilla está documentado en cada vista, vea Todas las vistas de autenticación.

Cuestiones relacionadas