如何响应 Django 基于类的视图中不允许的方法
Posted
技术标签:
【中文标题】如何响应 Django 基于类的视图中不允许的方法【英文标题】:How to respond to method not allowed in Django class-based views 【发布时间】:2021-07-25 06:12:49 【问题描述】:我有一个 Django 应用程序,其中的视图是使用 Django 的通用视图(预先固定,不能从 Django REST 框架更改为 APIView)编写的。每个 API 要么响应 POST、PUT 或 GET 请求。现在我想为每个 API 响应其他请求类型(DELETE、GET...等)的自定义消息。目前,Django 在没有任何响应正文的情况下发送其默认的 405 错误。我该如何改变呢?这是一个默认类
class ClassName(View):
def post(self, request) -> JsonResponse:
......
some other application logic
......
return JsonResponse(
"status": True,
"message": "",
, status=200)
现在,这个类只能成功回复 POST 请求,不允许任何其他方法。对于其他请求类型,我该如何响应以下消息?
return JsonResponse(
"status": false,
"msg": "method not allowed",
, status=405)
【问题讨论】:
【参考方案1】:正如 Django 文档所说:
在其核心,基于类的视图允许您响应不同的 具有不同类实例方法的 HTTP 请求方法,而不是 在单个视图函数内有条件地分支代码。 查看更多here。
因此,要处理 GET
请求,请将 get
方法添加到基于类的视图中,如下所示:
class ClassName(View):
#......
#some other request handlers
#......
def get(self, request) -> JsonResponse:
#......
#some other application logic
#......
return JsonResponse(
"status": True,
"message": "",
, status=200)
【讨论】:
是的,我知道。我想开枪是一条捷径。我不想为每个函数编写每种类型的请求类型。 如果是这样,您可以使用基于函数的视图,或者如果必须使用基于类的视图,那么您可以覆盖dispatch()
方法并将其路由到您的单个处理程序方法。查看更多here以上是关于如何响应 Django 基于类的视图中不允许的方法的主要内容,如果未能解决你的问题,请参考以下文章