如何在 Django 中引发 503 错误?

How to raise 503 error in django?

我想制作站点维护页面,并使用复选框字段为站点维护创建单例模型,因此当我从 Django 管理员选中该复选框时,如果我们点击 URL 中的任何一个,该站点应该显示维护页面网站。

我检查了 503 状态代码与 SERVICE UNAVAILABLE 有关所以 如何在我的代码中手动引发 503 错误,并且还想在引发 503 错误时呈现自定义模板。

此类错误和响应可以在django.http中找到。

如您所见,"service unavailable"没有完全匹配。

有多种方法可以使用 custom middleware

你可以: Raise an custom exception when the view is processed(你可以称它为PageInMaintenanceException)。 然后 process your exception 返回一个渲染好的模板 header.

或者简单地说: Return 当 the view is processed 和维护中的站点集被调用时,具有正确 header 的渲染模板。

from django.urls import resolve
from django.utils.deprecation import MiddlewareMixin
from django.http import HttpResponse
from django.template import loader

from .models import SiteMaintenance



class SiteMaintenanceMiddleware(MiddlewareMixin):
    def check_maintenance(self):
        site_maintenance = SiteMaintenance.get_object()
        return site_maintenance.is_maintenance

    def process_view(self, request, view_func, view_args, view_kwargs):
        if self.check_maintenance() and not request.user.is_staff:
            return HttpResponse(loader.render_to_string('503.html'), status=503)