gpt4 book ai didi

django - 我可以覆盖 rest_framework 权限类中的 http 状态吗?

转载 作者:行者123 更新时间:2023-12-04 13:19:12 26 4
gpt4 key购买 nike

我正在尝试创建一个继承自 permissions.BasePermission 的自定义权限类。我知道您可以覆盖自定义消息的 message 属性,但也可以覆盖 http 状态吗?我想为过期的链接返回 410。不确定我是否在尝试创建意外行为。

或者也许我的逻辑有更好的地方?基本上我想做的是向用户发送一个邀请链接,他们点击链接并请求获取一些模型数据。如果这个模型数据是在 10 天前创建的,(它确实有一个 created_on 属性)我想返回一个 410。我之前没有用这个逻辑设计过任何东西,对我来说它闻起来很臭就像一个权限类,但我可能是错的。

最佳答案

403 比状态码 410 的 Permission Denied 错误更有意义。

除此之外,您无法更改 DRF 中 Permission Denied 错误的状态代码(以 DRF 方式)。


解决方法

创建自定义 API 异常类为:

from rest_framework.exceptions import APIException
from rest_framework import status


class GenericAPIException(APIException):
"""
raises API exceptions with custom messages and custom status codes
"""
status_code = status.HTTP_400_BAD_REQUEST
default_code = 'error'

def __init__(self, detail, status_code=None):
self.detail = detail
if status_code is not None:
self.status_code = status_code

在您的权限类中,

from rest_framework import permissions


class FooPermission(permissions.BasePermission):
def has_permission(self, request, view):
<b>if some_condition:
raise GenericAPIException(detail="exception message", status_code=410)</b>
return True

关于django - 我可以覆盖 rest_framework 权限类中的 http 状态吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55973892/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com