The login_required decorator makes sure only logged-in users can see certain pages. It helps keep parts of your website private.
login_required decorator in Django
Start learning this pattern below
Jump into concepts and practice - no test required
or
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Syntax
Django
from django.contrib.auth.decorators import login_required @login_required def your_view(request): # your code here return HttpResponse('Hello, user!')
Place @login_required right above your view function.
It automatically redirects users to the login page if they are not logged in.
Examples
Django
from django.contrib.auth.decorators import login_required @login_required def dashboard(request): return HttpResponse('Welcome to your dashboard!')
Django
from django.contrib.auth.decorators import login_required @login_required(login_url='/custom-login/') def profile(request): return HttpResponse('User profile page')
Django
from django.contrib.auth.decorators import login_required @login_required def settings(request): return render(request, 'settings.html')
Sample Program
This view shows a secret message only if the user is logged in. Otherwise, it sends them to the login page.
Django
from django.http import HttpResponse from django.contrib.auth.decorators import login_required @login_required def secret_page(request): return HttpResponse('This is a secret page for logged-in users only.')
Important Notes
Make sure LOGIN_URL is set in your Django settings or use the login_url parameter.
The decorator works only on function-based views, but you can use LoginRequiredMixin for class-based views.
It helps improve security by preventing unauthorized access easily.
Summary
login_required keeps pages private by allowing only logged-in users.
Use it by placing @login_required above your view functions.
It redirects users to the login page if they are not signed in.
Practice
1. What is the main purpose of the
@login_required decorator in Django?easy
Solution
Step 1: Understand the role of
This decorator is used to protect views so only authenticated users can access them.@login_requiredStep 2: Compare options with the decorator's function
Only To restrict access to a view only to logged-in users correctly describes restricting access to logged-in users.Final Answer:
To restrict access to a view only to logged-in users -> Option AQuick Check:
login_required restricts access = D [OK]
Hint: Remember: login_required means login needed to see page [OK]
Common Mistakes:
- Thinking it logs out users automatically
- Confusing it with user registration
- Assuming it shows error messages
2. Which of the following is the correct way to apply the
@login_required decorator to a Django view function named dashboard?easy
Solution
Step 1: Recall the syntax for decorators in Python
Decorators are placed above the function with an @ symbol, like@login_required.Step 2: Check which option uses this syntax correctly
@login_required\ndef dashboard(request): correctly places@login_requiredabove the function definition.Final Answer:
@login_required\ndef dashboard(request): -> Option BQuick Check:
Decorator syntax uses @ above function = A [OK]
Hint: Decorator always goes above function with @ [OK]
Common Mistakes:
- Trying to call decorator like a function without @
- Placing decorator after function definition
- Using invalid syntax like 'login_required @dashboard'
3. Given this Django view code snippet, what happens when an anonymous user tries to access
/profile/?
@login_required
def profile(request):
return HttpResponse('User Profile')medium
Solution
Step 1: Understand what
It redirects users who are not logged in to the login page.@login_requireddoes for anonymous usersStep 2: Match this behavior with the options
The user is redirected to the login page correctly states the redirect to login page for anonymous users.Final Answer:
The user is redirected to the login page -> Option AQuick Check:
Anonymous user triggers redirect = C [OK]
Hint: Anonymous users get redirected, not error or content [OK]
Common Mistakes:
- Assuming anonymous users see the page content
- Thinking it returns 404 error
- Believing it shows permission denied instead of redirect
4. Identify the error in this Django view using
@login_required:
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
@login_required()
def dashboard(request):
return HttpResponse('Dashboard')medium
Solution
Step 1: Check the decorator usage syntax
@login_requiredis used without parentheses unless passing arguments.Step 2: Identify the incorrect parentheses usage
Incorrect use of parentheses after @login_required points out the error of using@login_required()instead of@login_required.Final Answer:
Incorrect use of parentheses after @login_required -> Option DQuick Check:
Decorator without args has no () = B [OK]
Hint: Use @login_required without () unless arguments needed [OK]
Common Mistakes:
- Adding parentheses when not required
- Forgetting to import HttpResponse (not tested here)
- Changing function name case unnecessarily
5. You want to protect a class-based view
DashboardView so only logged-in users can access it. Which is the correct way to apply login_required?hard
Solution
Step 1: Recall how to protect class-based views in Django
For class-based views, Django providesLoginRequiredMixinto enforce login.Step 2: Evaluate the options for class-based view protection
UseLoginRequiredMixinas a parent class instead oflogin_requiredcorrectly usesLoginRequiredMixinas a parent class, which is the standard pattern.Final Answer:
Use LoginRequiredMixin as a parent class instead of login_required -> Option CQuick Check:
Class views use mixins, not decorators = A [OK]
Hint: Use LoginRequiredMixin for class views, not @login_required [OK]
Common Mistakes:
- Trying to decorate class directly with @login_required
- Wrapping class after definition with login_required
- Manually calling login_required inside methods
