为啥 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 以向公会添加斜杠命令?