カスタムDjangoミドルウェア(Django 1.9)を使用して、匿名ユーザーがサイトの条件を受け入れるかどうかを確認したいです。&条件 - まだ表示されていない場合はダイアログを表示します「同意する」をクリックした。Djangoミドルウェア内のCookieを設定する
私はこれをデータベースに保存する必要はなく、単にCookieを使用することをお勧めします。私はsettings.py
に次のようにあります
MIDDLEWARE_CLASSES = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
...
'myapp.middleware.app_custom_middleware.TermsMiddleware',]
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'
私はその後、TermsMiddlewareでは非常に初歩的な何かしようとしている - ここで私が意図的にちょうどそれが動作するように取得しようとする要求とレスポンスを変更しようとしている:
をclass TermsMiddleware(object):
def process_request(self, request):
request.session['myCookieKey'] = 'myCookieValue'
request.session.save()
return
def process_response(self, request, response):
request.session['myCookieKey'] = 'myCookieValue'
request.session.save()
return response
私はブラウザに応答を検査した場合、私はmyCookieKey
が設定されていないことがわかり、私は、私は、これが書かれるべきか誤解したと思います。
このようなミドルウェア内でセッションを操作しても、Djangoが送信しようとしていた応答で送信されたCookieに影響を与えることはできますか?私ができるはずのようなドキュメントは、次のようにする必要があります。
NoneまたはHttpResponseオブジェクトを返さなければなりません。 Noneを返すと、Djangoは の他のprocess_request()ミドルウェア、process_view()ミドルウェア、 を実行し、最後に適切なビューを実行してこのリクエストを処理し続けます。 HttpResponse オブジェクトを返す場合、Djangoは他の要求、ビュー、または 例外ミドルウェア、または適切なビューを呼び出すことはありません。そのHttpResponseに応答 ミドルウェアを適用し、結果を返します。
また、ビュー機能の外でSessionStore()
を使用するようにドキュメントの注記を参照しました。理論的には、request
(およびresponse
)へのアクセス権があるので、私はここでそれを行う必要があるとは思わない。私はとにかくそれを試みた、と私はまだそれを働かせることができませんでした。
大変助けてください!
おかげ - これが事実であるならば、何がします"CookieにはセッションIDが含まれています - データ自体ではありません(Cookieベースのバックエンドを使用していない限り)。"後者の部分は、Cookieベースのバックエンドを使用しているため、Cookie内のデータそのものを実際に表示する必要があるようです。そしてyes、dictインターフェースの使用に同意します - 上記のコードを編集します。 –
それでもセッションクッキーですが、各値に固有のものではありません。そのクッキーでは、セッションデータは暗号化された形式で保存されます。キーと値は表示されません。 –