如何在django中引发503错误?

时间:2017-09-13 15:04:46

标签: django http-status-code-503 django-middleware

我想制作网站维护页面,并使用复选框字段创建用于网站维护的单例模型,所以当我从Django admin检查该复选框时,如果我们点击网站的任何URL,该网站应显示维护页面。

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

2 个答案:

答案 0 :(得分:1)

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)

答案 1 :(得分:0)

此类错误和回复可在django.http中找到。

如您所见,“服务不可用”并不完全匹配。

使用custom middleware有多种方法可以做到这一点。

你可以: Raise an custom exceptionthe view is processed(你可以称之为PageInMaintenanceException)。 然后process your exception返回带有正确标题的渲染模板。

或者简单地说: 当the view is processed和调用维护中的站点时,返回带有正确标题的渲染模板。