Login Django

Il existe plusieurs manières d'utiliser le login de base de Django. Nous verrons dans ce chapitre pas forcément la manière la plus facile à mettre en oeuvre, mais la plus souple.

Alors premièrement nous allons configurer notre fichier settings:

LOGIN_REDIRECT_URL = '/backoffice/'
LOGIN_URL = '/'
TEMPLATE_DIRS = (
    BASE_DIR + '/templates/',
)

Puis nous allons créer nos vues login et logout

from django.shortcuts import render
from django.contrib.auth import authenticate, login, logout
from django.http import *
from django.views.generic import TemplateView
from django.conf import settings

class LoginView(TemplateView):

  template_name = 'front/index.html'

  def post(self, request, **kwargs):

    username = request.POST.get('username', False)
    password = request.POST.get('password', False)
    user = authenticate(username=username, password=password)
    if user is not None and user.is_active:
        login(request, user)
        return HttpResponseRedirect( settings.LOGIN_REDIRECT_URL )

    return render(request, self.template_name)


class LogoutView(TemplateView):

  template_name = 'front/index.html'

  def get(self, request, **kwargs):

    logout(request)

    return render(request, self.template_name)

Et les templates que nous associons avec:

templates/front/index.html

<form method="post"  role="form" action="/">
{% csrf_token %}
<input type="text" name="username" placeholder="Utilisateur">
<input type="password" name="password" placeholder="Mot de passe">
<input type="submit" value="login" />
</form>

templates/backoffice/index.html

<p>Vous êtes identifié!</p>
<p><a href="/logout/">Sortir</a></p>

Il nous faut maintenant indiquer au routeur les addresses utilisées:

from django.conf.urls import patterns, include, url
from rest_framework import routers
from eboutique.views import *
from erp.views import *
from django.contrib.auth.decorators import login_required

urlpatterns = patterns('',
    url(r'^$', LoginView.as_view()),
    url(r'^logout/$', LogoutView.as_view()),
    url(r'^backoffice/$', login_required(TemplateView.as_view(template_name='backoffice/index.html'))),
)

Pour créer un superutilisateur vous pouvez passer par la ligne de commande:

python manage.py createsuperuser