Performance: Why authorization matters
Authorization affects server response time and user experience by controlling access to resources, impacting page load and interaction speed.
Jump into concepts and practice - no test required
from django.contrib.auth.decorators import permission_required @permission_required('app.view_sensitive', login_url='login') def view(request): data = get_filtered_data_for_user(request.user) return render(request, 'page.html', {'data': data})
def view(request): data = get_all_data() if not request.user.is_authenticated: return redirect('login') if not request.user.has_perm('app.view_sensitive'): return HttpResponseForbidden() return render(request, 'page.html', {'data': data})
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Authorization after data fetch | N/A (server-side) | N/A | Blocks rendering until data loads | [X] Bad |
| Authorization before data fetch | N/A (server-side) | N/A | Faster response, less blocking | [OK] Good |
@login_required ensures only logged-in users access the view.@permission_required checks permissions, @csrf_protect protects against CSRF, and @require_GET limits HTTP methods.@login_required
def dashboard(request):
if not request.user.has_perm('app.view_dashboard'):
return HttpResponse('Access Denied')
return HttpResponse('Welcome to Dashboard')def profile(request):
if not request.user.is_authenticated:
return HttpResponse('Please log in')
if not request.user.has_perm('app.view_profile'):
return HttpResponse('Access Denied')
return HttpResponse('User Profile')@login_required decorator.@login_required is cleaner and automatically redirects unauthenticated users to login.@permission_required to check permission and then manually checks is_staff, denying access if false. This correctly enforces both conditions.@superuser_required which is not a standard Django decorator and will cause a NameError.