【问题标题】:How to respond to method not allowed in Django class-based views如何响应 Django 基于类的视图中不允许的方法
【发布时间】: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)

【问题讨论】:

    标签: django http request


    【解决方案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
    猜你喜欢
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 2018-03-12
    • 2012-01-23
    • 2012-03-29
    • 2020-06-16
    相关资源
    最近更新 更多