Introducció
L'autenticació d'usuaris és una part fonamental de moltes aplicacions web. Django proporciona un sistema d'autenticació robust i fàcil d'utilitzar que permet gestionar usuaris, grups, permisos i sessions. En aquesta secció, aprendrem com implementar l'autenticació d'usuaris en una aplicació Django.
Conceptes Clau
- Sistema d'Autenticació de Django: Inclou models per a usuaris i grups, així com vistes i formularis per a la gestió d'usuaris.
- Vistes d'Autenticació: Django proporciona vistes genèriques per a l'inici de sessió, tancament de sessió, registre, canvi de contrasenya, etc.
- Permisos i Grups: Permeten controlar l'accés a diferents parts de l'aplicació basant-se en els rols dels usuaris.
Configuració Inicial
Instal·lació de l'Aplicació d'Autenticació
Django ve amb l'aplicació django.contrib.auth
preinstal·lada. Assegura't que està inclosa en la configuració del teu projecte:
Migracions Inicials
Executa les migracions per crear les taules necessàries a la base de dades:
Creació d'Usuaris
Utilitzant la Interfície d'Administració
La manera més senzilla de crear usuaris és utilitzant la interfície d'administració de Django. Accedeix a /admin
i crea un nou usuari.
Utilitzant el Shell de Django
També pots crear usuaris des del shell de Django:
from django.contrib.auth.models import User # Crear un usuari user = User.objects.create_user('nom_usuari', '[email protected]', 'contrasenya123') # Crear un superusuari superuser = User.objects.create_superuser('admin', '[email protected]', 'admin123')
Vistes d'Autenticació
Django proporciona vistes genèriques per a l'autenticació d'usuaris. A continuació, veurem com configurar-les.
Inici de Sessió
URL
# urls.py from django.urls import path from django.contrib.auth import views as auth_views urlpatterns = [ ... path('login/', auth_views.LoginView.as_view(), name='login'), ... ]
Plantilla
Crea una plantilla registration/login.html
:
<!-- templates/registration/login.html --> {% extends "base_generic.html" %} {% block content %} <h2>Inici de Sessió</h2> <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">Iniciar Sessió</button> </form> {% endblock %}
Tancament de Sessió
URL
# urls.py urlpatterns = [ ... path('logout/', auth_views.LogoutView.as_view(), name='logout'), ... ]
Plantilla
Crea una plantilla registration/logged_out.html
:
<!-- templates/registration/logged_out.html --> {% extends "base_generic.html" %} {% block content %} <h2>Has tancat la sessió correctament</h2> {% endblock %}
Registre d'Usuaris
Per al registre d'usuaris, necessitarem crear una vista personalitzada.
Formulari de Registre
# forms.py from django import forms from django.contrib.auth.models import User class RegisterForm(forms.ModelForm): password = forms.CharField(widget=forms.PasswordInput) password_confirm = forms.CharField(widget=forms.PasswordInput) class Meta: model = User fields = ['username', 'email', 'password'] def clean(self): cleaned_data = super().clean() password = cleaned_data.get("password") password_confirm = cleaned_data.get("password_confirm") if password != password_confirm: raise forms.ValidationError("Les contrasenyes no coincideixen") return cleaned_data
Vista de Registre
# views.py from django.shortcuts import render, redirect from django.contrib.auth import login from .forms import RegisterForm def register(request): if request.method == 'POST': form = RegisterForm(request.POST) if form.is_valid(): user = form.save(commit=False) user.set_password(form.cleaned_data['password']) user.save() login(request, user) return redirect('home') else: form = RegisterForm() return render(request, 'registration/register.html', {'form': form})
URL
# urls.py from . import views urlpatterns = [ ... path('register/', views.register, name='register'), ... ]
Plantilla
Crea una plantilla registration/register.html
:
<!-- templates/registration/register.html --> {% extends "base_generic.html" %} {% block content %} <h2>Registre</h2> <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">Registrar-se</button> </form> {% endblock %}
Exercicis Pràctics
- Crear un Usuari: Utilitza la interfície d'administració per crear un nou usuari i prova iniciar sessió amb aquest usuari.
- Personalitzar el Formulari de Registre: Afegeix camps addicionals al formulari de registre, com ara el nom complet i la data de naixement.
- Redirigir després del Tancament de Sessió: Modifica la vista de tancament de sessió per redirigir a una pàgina específica després de tancar la sessió.
Solucions
Exercici 1: Crear un Usuari
Accedeix a /admin
, crea un nou usuari i prova iniciar sessió amb aquest usuari a /login
.
Exercici 2: Personalitzar el Formulari de Registre
# forms.py class RegisterForm(forms.ModelForm): password = forms.CharField(widget=forms.PasswordInput) password_confirm = forms.CharField(widget=forms.PasswordInput) full_name = forms.CharField(max_length=100) birth_date = forms.DateField() class Meta: model = User fields = ['username', 'email', 'password', 'full_name', 'birth_date'] def clean(self): cleaned_data = super().clean() password = cleaned_data.get("password") password_confirm = cleaned_data.get("password_confirm") if password != password_confirm: raise forms.ValidationError("Les contrasenyes no coincideixen") return cleaned_data
Exercici 3: Redirigir després del Tancament de Sessió
# urls.py from django.contrib.auth.views import LogoutView urlpatterns = [ ... path('logout/', LogoutView.as_view(next_page='home'), name='logout'), ... ]
Conclusió
En aquesta secció, hem après com implementar l'autenticació d'usuaris en una aplicació Django. Hem vist com configurar les vistes d'inici de sessió, tancament de sessió i registre, així com com crear usuaris utilitzant la interfície d'administració i el shell de Django. A la següent secció, explorarem com gestionar formularis en Django.
Curs de Desenvolupament Web amb Django
Mòdul 1: Introducció a Django
- Què és Django?
- Configuració de l'Entorn de Desenvolupament
- Creació del teu Primer Projecte Django
- Comprensió de l'Estructura del Projecte Django
Mòdul 2: Conceptes Bàsics de Django
- Aplicacions Django i Estructura del Projecte
- Enrutament d'URL i Vistes
- Plantilles i Fitxers Estàtics
- Models i Bases de Dades
- Interfície d'Administració de Django
Mòdul 3: Django Intermedi
Mòdul 4: Django Avançat
- Consultes Avançades amb Django ORM
- Models d'Usuari Personalitzats
- Senyalitzacions de Django
- Proves en Django
- Optimització del Rendiment