Login-Required Decorators
Protect function views with @login_required.
Syntax
@login_requiredRestrict a function-based view to authenticated users with the @login_required decorator. Unauthenticated visitors are redirected to the login page. Use @permission_required for finer control.
For class-based views, use LoginRequiredMixin instead.
Example
from django.contrib.auth.decorators import login_required, permission_required
@login_required
def dashboard(request):
return render(request, "dashboard.html")
@permission_required("blog.add_post")
def new_post(request):
return render(request, "blog/create.html")When to use it
- A developer applies @login_required to a profile view so anonymous users are redirected to the login page.
- A team applies @permission_required('blog.add_post') to restrict post creation to authorized staff members.
- A developer uses @require_http_methods(['POST']) to ensure an API endpoint only accepts POST requests.
More examples
@login_required on a view
Redirects unauthenticated users to the LOGIN_URL before allowing access to the dashboard.
from django.contrib.auth.decorators import login_required
from django.shortcuts import render
@login_required
def dashboard(request):
return render(request, "dashboard.html")@permission_required decorator
Requires the blog.add_post permission; raise_exception=True returns 403 instead of redirecting.
from django.contrib.auth.decorators import permission_required
@permission_required("blog.add_post", raise_exception=True)
def post_create(request):
...@require_POST on an endpoint
Restricts the view to POST requests only, returning HTTP 405 for any other method automatically.
from django.views.decorators.http import require_POST
from django.http import JsonResponse
@require_POST
def submit_vote(request):
# Only executes on POST; returns 405 Method Not Allowed for GET
return JsonResponse({"status": "ok"})
Discussion