from django.contrib import messages
from django.shortcuts import redirect, render
from django.contrib.auth.decorators import login_required
@login_required
def update_profile(request):
if request.method == 'POST':
form = ProfileForm(request.POST, instance=request.user.profile)
if form.is_valid():
form.save()
messages.success(request, 'Profile updated successfully!')
return redirect('profile')
else:
messages.error(request, 'Please correct the errors below.')
else:
form = ProfileForm(instance=request.user.profile)
return render(request, 'accounts/profile.html', {'form': form})
def delete_account(request):
if request.method == 'POST':
request.user.delete()
messages.warning(request, 'Your account has been deleted.')
return redirect('home')
{% if messages %}
<div class="messages">
{% for message in messages %}
<div class="alert alert-{{ message.tags }}">
{{ message }}
<button type="button" class="close">×</button>
</div>
{% endfor %}
</div>
{% endif %}
Django's message framework provides one-time notifications to users. I use messages.success(), messages.error(), messages.warning(), and messages.info() to add messages. Messages persist across redirects and are displayed once. I configure message storage backend in settings—session-based is default. In templates, I iterate over messages to display them. For AJAX, I return messages in JSON. The framework works seamlessly with forms and generic views. This gives users feedback on their actions without manual session management.