2017-09-13 48 views
0

私はサイトのメンテナンスページを作りたいのですが、チェックボックスフィールドを使ってサイトメンテナンスのためのシングルトンモデルを作成していますので、Djangoの管理者からそのチェックボックスをチェックすると、ウェブサイトの任意のURLに当たったらメンテナンスページが表示されます。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 processedPageInMaintenanceExceptionとすることもできます)。 process your exception右のヘッダーでレンダリングされたテンプレートを返します。

または the view is processedとメンテナンス中のサイトが呼び出されたときに、右側のヘッダーでレンダリングされたテンプレートを返します。

+0

私はあなたのやり方を理解しませんでした。ミドルウェアでraise 503のサンプルコードを追加できますか? –

+0

カスタム例外を発生させる方法へのリンクを追加しました。より具体的なコードの設定に関する詳細情報が必要です:[Django sites framework](https://docs.djangoproject.com/ko/1.11/ref/contrib/sites/#module-django.contrib.sites)を使用していますか? )?サイトがメンテナンス中の場合は、コンテンツのみを編集するのか、コードを変更するのでしょうか(したがって、ウェブサイトを実行しているインスタンスをシャットダウンしますか)あなたの「サイトメンテナンスのためのシングルトンモデル」はどのように見えますか? –

関連する問題