在 Django 中如何返回403状态

Published on Aug. 22, 2023, 1:18 p.m.

在 Django 中,如果你需要在视图函数或者类视图中返回 HTTP 403 Forbidden 响应,你可以使用 django.http.HttpResponseForbidden 类。

以下是一个在视图函数中返回 403 响应的简单例子:

from django.http import HttpResponseForbidden

def my_view(request):
    # 其他逻辑...

    # 如果出现了某种情况,返回 403 响应
    if some_condition:
        return HttpResponseForbidden('Forbidden')

在这个例子中,如果 some_conditionTrue,那么视图将返回一个带有 ‘Forbidden’ 文本的 403 Forbidden 响应。

你也可以使用 django.shortcuts.permission_requireddjango.contrib.auth.decorators.login_required 装饰器来要求用户登录或具有特定权限,否则会返回 403 响应。例如:

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    # 视图的其他逻辑...

在这个例子中,如果用户没有登录,他们将被重定向到登录页面。如果 LOGIN_URL 没有在你的设置中定义,他们将看到一个 403 Forbidden 错误。

注意,permission_requiredlogin_required 装饰器默认返回的是 302 Redirect 响应,将用户重定向到登录页面,而不是 403 Forbidden。如果你希望在用户没有权限的情况下直接返回 403 Forbidden,你需要设置 raise_exception = True。例如:

from django.contrib.auth.decorators import permission_required

@permission_required('myapp.change_mymodel', raise_exception=True)
def my_view(request):
    # 视图的其他逻辑...

Tags: