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

mkf*_*kfb 5 django

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

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

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


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

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
Run Code Online (Sandbox Code Playgroud)

Mau*_*zar 0

如果您希望每个视图都有不同的响应,您可以覆盖您的函数,例如:

class someView(View):
    ....

    def http_method_not_allowed(self, request, *args, **kwargs):
        return HttpResponse("Not available")
Run Code Online (Sandbox Code Playgroud)

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