2

Django プロジェクトのすべてのビューにメッセージを表示したいと考えています。ユーザーがアカウントを作成したら、メールを確認するように求めるメールを送信し、(確認 URL にアクセスして) メール アドレスを確認するまでメッセージを表示します。

ここで、verify URL ビューにメッセージを表示したくありません。また、メッセージを「複製」したくありません。つまり、同じメッセージを 2 つ表示したくありません。最初に、すべての応答にメッセージを追加するだけのミドルウェアを作成するアプローチを試みましたが、これには 2 つの欠点があります。

  1. メッセージは検証ビューに表示されます。現在、そのビューからすべてのメッセージを削除していますが、これは理想的ではありません。
  2. ビューでリダイレクトを使用すると、同じメッセージが複数表示されます。私が使用するリダイレクトのほとんどは POST の後であるため、リクエストが GET であるかどうかを確認できましたが、それは正しくありません。

ミドルウェアは次のとおりです。

class VerifiedEmailMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
        # One-time configuration and initialization.

    def __call__(self, request):
        # Code to be executed for each request before
        # the view (and later middleware) are called.

        if request.user.id is None:
            return self.get_response(request)

        if not request.user.profile.verified_email:
            messages.warning(request, 'We have sent you an email to verify your account. '
                                      'Please click the link in that email to verify your account.')

        response = self.get_response(request)

        return response

これを行うための標準的な、またはより良い方法はありますか?

4

1 に答える 1