Lezione 6: Profili Utente – Perché Ognuno Merita un Po’ di Celebrità
Congratulazioni, maestro del blog! 🎉 Hai già padroneggiato la registrazione, il login e i commenti. Ma diciamolo, senza profili utente, il tuo blog sembra una festa in maschera dove nessuno indossa il cartellino col nome. È ora di dare ai tuoi utenti un profilo da sfoggiare!
In questa lezione, aggiungeremo profili utente, così ognuno dei tuoi lettori potrà avere un’identità unica. È come dare un distintivo personalizzato a ciascuno, con la scritta: “Sì, appartengo a questo blog, e ho delle opinioni!”
Step 1: Attiva l’Ambiente Virtuale (La Tua Zona Zen del Codice)
Prima di tutto, assicurati di essere nel tuo ambiente virtuale, dove accade tutta la magia.
source venv/bin/activate
Se vedi (venv)
nel tuo terminale, sei ufficialmente nella tua zona zen di programmazione. 🧘♂️
Step 2: Installa Pillow (Per la Magia della Gestione delle Immagini)
Dato che aggiungeremo le foto profilo, Django ha bisogno della libreria Pillow per gestire le immagini. Installiamola, così Django potrà utilizzare ImageField
per le foto profilo.
python3 -m pip install Pillow
Ora che Pillow è installato, Django è pronto per gestire i campi immagine!
Step 3: Estendi il Modello Utente (Aggiungiamo un Po’ di Brillantezza ai Tuoi Utenti)
Il modello utente predefinito di Django è funzionale, ma manca di quella scintilla. Aggiungiamo un po’ di pepe creando un profilo per ogni utente, con un campo per la biografia, la foto profilo e tutto ciò che potrebbero desiderare.
Percorso del file: myblog/blog/models.py
Aggiungi questo codice sotto il modello Comment
:
from django.contrib.auth.models import User
from django.db import models
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="profile")
bio = models.TextField(blank=True, null=True)
profile_picture = models.ImageField(upload_to='profile_pics/', blank=True, null=True)
def __str__(self):
return f"Profilo di {self.user.username}"
user
: Collega questo profilo a un utente Django.bio
: Un piccolo spazio per scrivere qualcosa di sé.profile_picture
: Perché a chi non piace una bella foto profilo?
Step 4: Crea e Applica le Migrazioni (Per Rendersi Ufficiale)
Facciamo sapere a Django che abbiamo un nuovo modello luccicante. Esegui questi comandi per creare e applicare le migrazioni:
python3 manage.py makemigrations
python3 manage.py migrate
Ora, il database di Django riconosce ufficialmente i tuoi profili utente. La folla va in delirio! 🎉
Step 5: Crea i Profili Mancanti (Senza Coding Extra)
Se hai già utenti esistenti, è possibile che non abbiano ancora un profilo. Per assicurarti che tutti abbiano un profilo, esegui uno script rapido nella shell Django per creare i profili mancanti.
-
Apri la shell di Django eseguendo:
python3 manage.py shell
-
Esegui questo codice nella shell di Django:
from django.contrib.auth.models import User from blog.models import UserProfile for user in User.objects.all(): if not hasattr(user, 'profile'): UserProfile.objects.create(user=user) print(f'Profilo creato per {user.username}')
-
Esci dalla shell digitando:
exit()
Ora, ogni utente dovrebbe avere un profilo, anche se è stato creato prima di questa lezione!
Step 6: Aggiungi i Signals per Creare Automaticamente i Profili dei Nuovi Utenti
Non vogliamo che gli utenti debbano cercare il pulsante “crea profilo”. Facciamo in modo che Django lo faccia automaticamente utilizzando i signals, così ogni nuovo utente avrà automaticamente un profilo.
Percorso del file: myblog/blog/signals.py
Crea questo file e aggiungi il seguente codice:
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User
from .models import UserProfile
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
In questo modo, ogni volta che un nuovo utente si registra, Django creerà automaticamente un profilo per lui. Magia pura.
Step 7: Registra UserProfile nell’Admin (Per una Visualizzazione Rapida)
Aggiungiamo UserProfile
al sito admin, così potrai vedere tutti i profili utente in un colpo solo.
Percorso del file: myblog/blog/admin.py
Aggiungi questo codice:
from django.contrib import admin
from .models import UserProfile
admin.site.register(UserProfile)
Ora, vai nel pannello admin per vedere tutti i profili utente allineati come una galleria di celebrità.
Step 8: Crea un Form per il Profilo (Perché Serve un Form Elegante per Persone Eleganti)
Per permettere agli utenti di modificare i dettagli del loro profilo, creiamo un form per il profilo.
Percorso del file: myblog/blog/forms.py
Aggiungi questo codice sotto CustomUserCreationForm
:
from .models import UserProfile
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ['bio', 'profile_picture']
Step 9: Aggiungi una View per Modificare il Profilo (Così gli Utenti Possono Brillare)
Creiamo una view che consenta agli utenti di modificare le informazioni del loro profilo.
Percorso del file: myblog/blog/views.py
Aggiungi questo codice:
from django.contrib.auth.decorators import login_required
from .forms import UserProfileForm
from django.shortcuts import render, redirect
@login_required
def update_profile(request):
profile = request.user.profile
if request.method == 'POST':
form = UserProfileForm(request.POST, request.FILES, instance=profile)
if form.is_valid():
form.save()
return redirect('profile')
else:
form = UserProfileForm(instance=profile)
return render(request, 'profile/update_profile.html', {'form': form})
Questa view consente agli utenti di aggiornare i dettagli del profilo: perfetta per aggiungere quella bio “Sono una persona da cani” o “Team pizza con ananas”.
Step 10: Crea i Template del Profilo (Un Posto per Mostrare il Proprio Profilo Scintillante)
Creiamo i template per aggiornare il profilo.
Percorso del file:
myblog/
blog/
templates/
profile/
update_profile.html
Ecco come potrebbe apparire il template:
{% extends "base.html" %}
{% block title %}Aggiorna Profilo{% endblock %}
{% block content %}
<h2>Aggiorna il Tuo Profilo</h2>
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Salva Modifiche</button>
</form>
{% endblock %}
Questo template fornisce un form per caricare una foto profilo e aggiungere una bio. Molto chic, no?
Step 11: Aggiungi un URL per la View di Aggiornamento del Profilo
Aggiungi un pattern URL per consentire agli utenti di accedere alla pagina di aggiornamento del profilo.
Percorso del file: myblog/blog/urls.py
Aggiungi questo codice:
from . import views
urlpatterns = [
path('', views.blog_index, name='blog_index'),
path('post/<int:pk>/', views.blog_post_detail, name='blog_post_detail'),
path('register/', views.register, name='register'),
path('profile/', views.update_profile, name='profile'),
]
Ora gli utenti possono accedere alla pagina di aggiornamento del profilo su /profile/
.
Step 12: Mettilo alla Prova! (Il Momento del Glamour del Profilo)
Avvia il server e prova la nuova funzionalità del profilo:
python3 manage.py runserver
Vai su /profile/
e prova ad aggiornare il tuo profilo utente. Aggiungi una bio, carica una foto profilo e lascia brillare la tua personalità.
Step 13: Disattiva l’Ambiente Virtuale (Addio Zona Zen)
Quando hai finito, ricordati di uscire dal tuo ambiente virtuale:
deactivate
Bentornato alla realtà, con una funzionalità profilo funzionante e una comunità piena di profili utenti vibranti.
Riepilogo Lezione 6
Ta-da! 🎉 Hai aggiunto i profili utente al tuo blog Django. Ora ogni utente ha un posto per sfoggiare la sua bio e una foto profilo, aggiungendo un tocco di personalità al tuo blog.
Nella prossima lezione, esploreremo ancora più modi per personalizzare l’esperienza utente. Ma per ora, goditi i profili utenti che danno vita al tuo blog. Cin cin a rendere il tuo blog un po’ più come Hogwarts – ognuno con la sua identità unica! 🧙♂️✨
Vedi anche
- Lezione 5: Registrazione Utenti – Perché Solo i Meritevoli Dovrebbero Commentare!
- Lezione 4: Autenticazione Utenti – Perché Non Tutti Dovrebbero Accedere al Santuario Segreto del Tuo Blog
- Lezione 3: Form – L’Arte di Chiedere Gentilmente Dati agli Utenti (Senza Farli Scappare)
- Lezione 2: Il Pattern Model-View-Template (MVT) – Come MVC, Ma Con Più Magia e Meno Mal di Testa
- Lezione 1: Iniziamo con Django – Come Montare i Mobili IKEA, Ma con Meno Frustrazione (E un Ambiente Virtuale!)