我想製作網站維護頁面,並使用複選框字段創建網站維護的單一模型,因此,當我從Django管理員中選中該複選框時,如果我們點擊網站的任何網址,網站應顯示維護頁面。如何在django中引發503錯誤?
我檢查503狀態碼與服務不可所以 我如何可以手動503錯誤養在我的代碼,也想呈現的自定義模板時503錯誤加薪。
我想製作網站維護頁面,並使用複選框字段創建網站維護的單一模型,因此,當我從Django管理員中選中該複選框時,如果我們點擊網站的任何網址,網站應顯示維護頁面。如何在django中引發503錯誤?
我檢查503狀態碼與服務不可所以 我如何可以手動503錯誤養在我的代碼,也想呈現的自定義模板時503錯誤加薪。
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)
這種錯誤和響應可以在django.http
找到。
正如您所看到的,「服務不可用」沒有完全匹配。
有多種方法可以使用custom middleware。
您可以: Raise an custom exception當the view is processed(您可以稱它爲PageInMaintenanceException
)。 然後process your exception返回帶有正確標題的渲染模板。
或者簡單地: 當the view is processed和被維護的站點被調用時,返回帶有正確標題的渲染模板。
我不明白你的方式。你可以在中間件中添加raise 503的示例代碼嗎? –
我添加了一個鏈接來提升自定義異常。我需要更多關於你的設置的更多信息:你使用的是[Django網站框架](https://docs.djangoproject.com/ko/1.11/ref/contrib/sites/#module-django.contrib.sites )?當您的網站進行維護時,您是要僅編輯內容還是要更改代碼(並因此關閉運行您網站的實例)?你的「網站維護單體模型」是怎麼樣的? –
它默認返回500嗎?或者告訴我什麼是回溯,你可以做一個例外 –
不,我想寫的代碼將手動升起503 –
如果你有一個錯誤,你可以做一個excepción並提出你想要的任何模板 –