在 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_condition
为 True
,那么视图将返回一个带有 ‘Forbidden’ 文本的 403 Forbidden 响应。
你也可以使用 django.shortcuts.permission_required
或 django.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_required
和 login_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):
# 视图的其他逻辑...