【问题标题】:How to raise 503 error in django?如何在 django 中引发 503 错误?
【发布时间】:2018-02-22 08:46:16
【问题描述】:

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

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

【问题讨论】:

  • 默认返回500?或者告诉我什么是traceback,你可以做一个异常
  • 没有。我想编写将手动引发 503 的代码
  • 如果你有错误,你可以做一个例外并提出你想要的任何模板

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


【解决方案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)

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 我不明白你的方式。可以在中间件中添加raise 503的示例代码吗?
    • 我添加了如何引发自定义异常的链接。我需要有关您的设置的更多信息以获取更具体的代码:您使用的是Django sites framework吗?当您的网站处于维护状态时,您是要仅编辑内容还是要更改代码(并因此关闭运行您网站的实例)?您的“站点维护单例模型”是什么样的?
    猜你喜欢
    • 2011-05-11
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 2011-08-30
    • 1970-01-01
    相关资源
    最近更新 更多