django自定义405界面
django自定义405、500界面很简单,在模板目录下创建同名的html文件,然后把DEBUG 改为False就行了。
![](/media/upload/68dd8b0949e54c1ebc5ccf5d60ecfee0.png)
# setting.py
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = Flase
这样当资源找不到或者服务器内部错误就就会显示自定义的界面。
但是405就不行,比如我这个url只允许POST访问。
# urls.py
urlpatterns = [
path('', views.index),
]
# views.py
@require_POST # 只允许POST请求
def index(request):
return render(request, 'index.html')
用GET方式请求时,它显示的是这个界面。
![](/media/upload/a1eac3dd43df4de2ba15f4b8da679c13.png)
这时想要显示自定义的405界面,就需要写一个中间件来解决。
在APP目录下创建一个 middleware目录,新建一个py文件,输入下面的代码。
# -*- coding: utf-8 -*-
from django.http import HttpResponseNotAllowed
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import render
# 自定405界面 中间件
class HttpResponseNotAllowedMiddleware(MiddlewareMixin):
def process_response(self, request, response):
if isinstance(response, HttpResponseNotAllowed): # 判断当前的response是不是HttpResponseNotAllowed类的实例
return render(request,'405.html', status=405)
return response
![](/media/upload/c03deafb2b4845d589baf6f39411c074.png)
setting里面添加中间件
MIDDLEWARE = [
...
'mainapp.middleware.auth.HttpResponseNotAllowedMiddleware'
]
这样当请求方式不对时,就显示自定义的405界面了。
![](/media/upload/5d75e5153e1d43c1bc728be10aa3513c.png)
当然也可以在每个视图里面判断当前的请求方式然后render,就是有点笨。
如果文章对你有帮助!可点击按钮打赏哦 ~
发表评论
共 0 条评论
暂无评论