2010-05-19 10 views
54

Desidero consentire a un utente di accedere prima di visualizzare le pagine. C'è un modello incorporato per l'accesso degli utenti, in modo che non debba scrivere la mia pagina di accesso?Esiste un modello di accesso incorporato in Django?

+2

'Django fornisce ** nessun modello predefinito ** per le viste di autenticazione. Dovresti creare i tuoi modelli per le viste che desideri utilizzare. ' –

risposta

47

Sì. È possibile leggere tutto su di esso qui: https://docs.djangoproject.com/en/1.8/topics/auth/default/#django.contrib.auth.decorators.login_required ... ma qui ci sono alcuni punti elenco:

  • aggiungere 'django.contrib.auth.middleware.AuthenticationMiddleware'-MIDDLEWARE_CLASSES in settings.py
  • aggiungere 'django.contrib.auth 'e 'django.contrib.contenttypes'-INSTALLED_APPS in settings.py
  • configurare un URL per il login usando django.contrib.auth.views.login per la vista, come url(r'^login/$', 'django.contrib.auth.views.login',name="my_login")
  • Nella tua vista, includi il decoratore login_required e aggiungilo prima della tua vista. Per esempio ...

views.py ...

from django.contrib.auth.decorators import login_required 

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

Per impostazione predefinita, poi mettere il modello interno my_template_directory/registration/login.html. Ulteriori informazioni su quel modello possono essere trovate al link all'inizio di questo post.

+1

Grazie per l'informazione. Ottengo un'eccezione: TemplateDoesNotExist Tuttavia, la pagina di accesso di amministratore (anche dalla cartella dei modelli) esiste. – stanleyxu2005

+1

puoi passare in un argomento 'template_name': 'percorso/a/tuo/template.html' nell'urlconf per assicurarti che stia cercando di leggere il modello dalla posizione corretta –

+0

@ stanleyxu2005 se vuoi usare il modello predefinito , è necessario crearlo effettivamente in una sottocartella della directory dei modelli. – Brant

29

Come accennato nei commenti dell'autore, il modo più semplice per farlo è quello di aggiungere le seguenti righe per 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), 
) 

Per quanto ne so, aggiungendo le r'^accounts/$' e r'^accounts/profile/$' URL non è necessario a meno che non sia richiesta la gestione del profilo utente.

Come suggerito da @mmatt nei commenti, impostare LOGIN_REDIRECT_URL = '/' in settings.py per evitare il reindirizzamento predefinito su /accounts/profile/ dopo il login. Vedi LOGIN_REDIRECT_URL nella documentazione delle impostazioni di Django.

Questo dovrebbe funzionare anche in Django 2.x utilizzando path anziché url in modo appropriato.

+0

Imposta 'LOGIN_REDIRECT_URL = '/'' nel tuo settings.py per reindirizzare a una pagina diversa da/accounts/profilo. – mehmet

+2

Supporto per gli argomenti vista stringa in 'url()' [è stato rimosso con Django 1.10] (https://docs.djangoproject.com/en/1.11/releases/1.10/#features-removed-in-1-10) . Usa 'da import django.contrib.auth.views login di importazione' e 'url (r'^account/login/$ ', login, ...' invece (e simile per il logout). – Evert

+0

Grazie, aggiornato. – mrts

4

Se si desidera intraprendere un percorso rapido per salire e correre, si consiglia di utilizzare l'URLConf fornito.

ad esempio:

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

Vedi i dettagli nella documentazione django: https://docs.djangoproject.com/en/1.8/topics/auth/default/#module-django.contrib.auth.views

+0

E un esempio di modello di login sulla stessa pagina: https://docs.djangoproject.com/en/1.8/topics/auth/default/#all-authentication-views Sembra che non ce ne siano di built-in? E nemmeno la registrazione, sembra come se fosse necessario un modulo di terze parti per questo: https://www.djangopackages.com/grids/g/registration/ –

+0

Correzione automatica: alcune viste hanno modelli incorporati, come 'account/password_reset /', altri don ' mi piace 'account/login /'. –

7

Il più upvoted response da @brant è tecnicamente corretto. Django fornisce viste predefinite per gestire le funzionalità di accesso ma per lo non fornisce un modello:

Django non fornisce un modello predefinito per le viste di autenticazione. È necessario creare i propri modelli per le viste che si desidera utilizzare. Il contesto del modello è documentato in ogni vista, vedi Tutte le viste di autenticazione.

Problemi correlati