为啥 Django 没有 405 的错误页面处理程序 - 方法不允许?

Posted

技术标签:

【中文标题】为啥 Django 没有 405 的错误页面处理程序 - 方法不允许?【英文标题】:Why Django doesnt have Error Page Handler for 405 - Method Not Allowed?为什么 Django 没有 405 的错误页面处理程序 - 方法不允许? 【发布时间】:2018-08-16 03:54:59 【问题描述】:

当我阅读 Django 文档时,我发现只有以下处理程序: 400, 403, 404, 500 个错误。

为什么 405 错误处理程序不存在,但像 require_POST() 这样的装饰器却很常见?

关键是,为 Method Not Allowed 错误创建自定义错误页面的正确方法是什么?


我使用 Django 中间件解决了我的问题,也许这会对某人有所帮助

from django.http import HttpResponseNotAllowed
from django.shortcuts import render


class HttpResponseNotAllowedMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        response = self.get_response(request)

        if isinstance(response, HttpResponseNotAllowed):
            return render(request, '405.html', status=405)

        return response

【问题讨论】:

检查这个 - ***.com/questions/22983222/… 问题不是我有 405 错误的原因 - 我知道为什么。问题是如何处理自定义错误页面的 405 错误。 您可以创建自定义处理程序 - 如果您使用 Django Rest Framework 之类的 django-rest-framework.org/api-guide/exceptions 或使用类似 medium.com/@mwhitt.w/… 的方法 - 创建自定义处理函数并在那里分配状态。 【参考方案1】:

如果您想为每个视图提供不同的响应,您可以覆盖您的函数,例如:

class someView(View):
    ....

    def http_method_not_allowed(self, request, *args, **kwargs):
        return HttpResponse("Not available")

如果你想知道函数的作用,请查看https://github.com/django/django/blob/master/django/views/generic/base.py#L90

【讨论】:

以上是关于为啥 Django 没有 405 的错误页面处理程序 - 方法不允许?的主要内容,如果未能解决你的问题,请参考以下文章

Cors 中启用的所有标头,WebConfig 和 WebApiConfig 之间没有冲突,为啥我的 WebApi 返回 405 错误?

为啥 Discord API 返回错误 405 以向公会添加斜杠命令?

Django框架错误处理

已解决:Django:删除请求返回错误 405

Django - 使用 Ajax 的 POST 方法错误“POST /......./ HTTP/1.1”405 0

方法不允许 (POST) Django 405 错误