2017-09-13 183 views
0

我想製作網站維護頁面,並使用複選框字段創建網站維護的單一模型,因此,當我從Django管理員中選中該複選框時,如果我們點擊網站的任何網址,網站應顯示維護頁面。如何在django中引發503錯誤?

我檢查503狀態碼與服務不可所以 我如何可以手動503錯誤養在我的代碼,也想呈現的自定義模板時503錯誤加薪。

+0

它默認返回500嗎?或者告訴我什麼是回溯,你可以做一個例外 –

+0

不,我想寫的代碼將手動升起503 –

+0

如果你有一個錯誤,你可以做一個excepción並提出你想要的任何模板 –

回答

0
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) 
0

這種錯誤和響應可以在django.http找到。

正如您所看到的,「服務不可用」沒有完全匹配。

有多種方法可以使用custom middleware

您可以: Raise an custom exceptionthe view is processed(您可以稱它爲PageInMaintenanceException)。 然後process your exception返回帶有正確標題的渲染模板。

或者簡單地: 當the view is processed和被維護的站點被調用時,返回帶有正確標題的渲染模板。

+0

我不明白你的方式。你可以在中間件中添加raise 503的示例代碼嗎? –

+0

我添加了一個鏈接來提升自定義異常。我需要更多關於你的設置的更多信息:你使用的是[Django網站框架](https://docs.djangoproject.com/ko/1.11/ref/contrib/sites/#module-django.contrib.sites )?當您的網站進行維護時,您是要僅編輯內容還是要更改代碼(並因此關閉運行您網站的實例)?你的「網站維護單體模型」是怎麼樣的? –