3

session_keyカスタム Django ミドルウェアでにアクセスできません。次を使用してアクセスしようとします:

session = Session.objects.get(pk=request.session._session_key)

また

session_key = request.COOKIES[settings.SESSION_COOKIE_NAME]
session = Session.objects.get(pk=session_key)

エラーが発生します:

Session matching query does not exist.

ファイルの最後MIDDLEWARE_CLASSESとその後django.contrib.sessions.middleware.SessionMiddlewareにミドルウェアを配置しました。settings.py

ミドルウェアでセッション キーを設定できますが、session_key はページ全体が表示された後にのみ生成/アクセスできるように見えます。ページが初めて表示されると、テンプレートに{{ request.session.session_key }}返されるためです。Noneページを更新すると、session_key. アクセス方法に関するヒントはsession_key大歓迎です。

4

2 に答える 2

5

私はそれを機能させることができました。通常、セッションは完全なページがレンダリングされた後にのみ保存されます。

以下を使用して、セッションを途中でミドルウェアに保存することができました。

request.session.save()

次に、モデルを次のように保存できます (セッション後の _id に注意してください。これにより、私の場合は整数または varchar のみを使用して外部キーを設定できます)。

visitor = Visitor()
visitor.session_id = request.session.session_key
visitor.save()
于 2012-05-18T16:45:31.847 に答える
1

私は以下でこれを行うことができました、それはあなたのために働きますか?

Session.objects.get(session_key=request.session.session_key)

そうでない場合、セッションがアクティブになる前にセッションにアクセスしようとしたことは、おそらく@ilvarが正しいでしょう。

于 2012-05-18T15:56:31.787 に答える