2014-09-03 10 views
5

Sto provando a impostare le sessioni di accesso all'interno della mia app Web ma non riesco a farlo funzionare. Sono nuovo di django e leggo la documentazione per le sessioni ma non faccio la connessione alla mia app web. Tutto quello che voglio da questo momento è controllare se un utente è loggato e se non reindirizzare alla pagina di accesso.sessioni di login per django

Ecco il codice che sto cercando di incorporare sessioni di accesso.

settings.py

INSTALLED_APPS = (
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'logins', 
    'dashboards' 
) 

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
) 

urls.py

from django.conf.urls import patterns, include, url 
    from django.conf import settings 
    from django.conf.urls.static import static 
    from django.contrib import admin 
    admin.autodiscover() 

    urlpatterns = patterns('', 
     url(r'^$', 'logins.views.login', name='login'), 
     url(r'^accounts/auth/$', 'logins.views.auth_view', name='auth_view'), 
     url(r'^accounts/dashboard/$', 'dashboards.views.dashboard', name='dashboard'), 
     url(r'^accounts/logout/$', 'logins.views.logout', name='logout'), 
     url(r'^accounts/invalid/$', 'logins.views.invalid', name='invalid'), 

views.py per gli accessi

from django.shortcuts import render, render_to_response, RequestContext 
    from django.http import HttpResponseRedirect, HttpResponse 
    from django.contrib import auth 
    from django.core.context_processors import csrf 

    def login(request): 
     c = {} 
     c.update(csrf(request)) 
     return render_to_response('login.html', c) 

    def auth_view(request): 
     username = request.POST.get('username', '') 
     password = request.POST.get('password', '') 
     user = auth.authenticate(username=username, password=password) 

     if user is not None and user.is_active: 
      auth.login(request, user) 
      return HttpResponseRedirect('/accounts/dashboard') 
     else: 
      return HttpResponseRedirect('/accounts/invalid') 

    def logout(request): 
     auth.logout(request) 
     return render_to_response('logout.html') 

    def invalid(request): 
     return render_to_response('invalid.html') 

views.py per cruscotto questo è app essendo registrati nel

from django.shortcuts import render, render_to_response, RequestContext 
from django.http import HttpResponseRedirect, HttpResponse 
from django.contrib import auth 
from django.core.context_processors import csrf 

def dashboard(request): 
    return render_to_response('dashboard.html') 
+2

C'è un motivo particolare stai evitando il [sistema integrato di autenticazione] (https://docs.djangoproject.com/en /1.6/topics/auth/default/#module-django.contrib.auth.views)? Ha funzionalità per reindirizzare gli utenti se non sono connessi alla pagina di accesso. – rbonick

+0

@rbonick Il link è morto. –

risposta

5

è molto semplice da fare che in django: In questo esempio le sessioni verranno salvati nel DB (è necessario sincronizzare l'app Django con il database)

User-login:

from django.contrib.auth.models import User 
from django.contrib.auth import authenticate, login 
if request.method == 'POST': 
    username = request.POST.get('nickname','') 
    password = request.POST.get('password','') 
    user = authenticate(username=username, password=password) 
     if user is not None: 
      if user.is_active: 
       request.session.set_expiry(86400) #sets the exp. value of the session 
       login(request, user) #the user is now logged in 

E per gli altri siti (in cui è necessario essere loggedin):

def my_func(request): 
    if request.user.is_authenticated(): 
     print (user.id) #the user is loggedin 

O si utilizza il login_require -decorator:

from django.contrib.auth.decorators import login_required 

@login_require 
def my_func(request): 
    print(user.id) #the user is loggedin 
4

È possibile utilizzare il sistema di autenticazione incorporato di Django che si occupa di verificare se un utente ha effettuato l'accesso o meno. Puoi usare il decoratore login_required.

views.py

from django.contrib.auth.decorators import login_required 

@login_required 
def my_view_login_required(request): 
    return render_to_response('dashboard.html') 
Problemi correlati