这个有效:
def index(request):
try:
# Do some stuff
except:
return render(request, 'something.html')
但是我怎样才能捕捉到错误:django.http.request.DisallowedHost
?
试过了,还是不行:
from django.core.exceptions import DisallowedHost
def index(request):
try:
# Do some stuff
except DisallowedHost:
return render(request, 'something.html')
最佳答案
请不要更换中间件或做一些其他奇怪的事情。这非常简单:DisallowedHost() 由在请求对象上调用 get_host()
的第一件事引发。通常,这是一个中间件,因为在请求/响应周期中过早地执行它会导致无法关闭或自定义。
因此首先在链中注入(inject)您的自定义中间件并在那里短路:
# File: main.middleware
from django.shortcuts import redirect
from django.core.exceptions import DisallowedHost
class FriendlyDisallowedHost:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request, *args, **kwargs):
try:
checkhost = request.get_host()
except DisallowedHost:
return redirect("http://localhost/")
return self.get_response(request)
设置:
MIDDLEWARE = [
"main.middleware.FriendlyDisallowedHost",
# ... rest of middleware
]
关于python - 如何在 View 中捕获 django.http.request.DisallowedHost?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64579749/