web-dev-qa-db-ja.com

Django Cookie、どのように設定できますか?

訪問者が選択した場所に基づいて異なるコンテンツを表示するWebサイトがあります。例:55812にZipとして入力します。どの都市と地域の緯度/経度がわかるか。つまり、そのエリアに関連するコンテンツを提供します。私の質問は、帰国時に郵便番号を常に入力する必要がないように、これをクッキーに保存するにはどうすればよいですか?

次のように表示されます。

  1. エリアに基づいて永続的なCookieを設定します。
  2. 読み取りCookieが返されたら、郵便番号を取得します。
  3. Cookieの郵便番号に基づいてコンテンツを返します。

クッキーの設定に関する確かな情報を見つけることができないようです。どんな助けも大歓迎です。

111
Jeffrey

これは、永続的なCookieを設定するヘルパーです。

import datetime

def set_cookie(response, key, value, days_expire = 7):
  if days_expire is None:
    max_age = 365 * 24 * 60 * 60  #one year
  else:
    max_age = days_expire * 24 * 60 * 60 
  expires = datetime.datetime.strftime(datetime.datetime.utcnow() + datetime.timedelta(seconds=max_age), "%a, %d-%b-%Y %H:%M:%S GMT")
  response.set_cookie(key, value, max_age=max_age, expires=expires, domain=settings.SESSION_COOKIE_DOMAIN, secure=settings.SESSION_COOKIE_SECURE or None)

応答を送信する前に、次のコードを使用してください。

def view(request):
  response = HttpResponse("hello")
  set_cookie(response, 'name', 'jujule')
  return response

UPDATEPeter's answer 以下を組み込みソリューションで確認:

59
jujule

Djangoのセッションフレームワーク を使用すると、ほとんどのシナリオをカバーできますが、Djangoは、リクエストおよび応答オブジェクトで 直接Cookie操作メソッド も提供するようになりました(したがって、ヘルパー機能が必要です)。

クッキーの設定:

def view(request):
  response = HttpResponse('blah')
  response.set_cookie('cookie_name', 'cookie_value')

Cookieを取得する:

def view(request):
  value = request.COOKIES.get('cookie_name')
  if value is None:
    # Cookie is not set

  # OR

  try:
    value = request.COOKIES['cookie_name']
  except KeyError:
    # Cookie is not set
237
Peter

Cookieを手動で設定することもできますが、ユースケースに応じて(および将来、より多くのタイプの永続/セッションデータを追加する場合)、 Djangoのセッション機能 を使用する方が合理的かもしれません。これにより、 get and set 変数がユーザーのセッションCookieに内部的に関連付けられます。これの素晴らしい点は、ユーザーのセッションに関連付けられた多くのデータを保存する場合、すべてをCookieに保存すると、HTTPリクエストとレスポンスに大きな重みが加わることです。セッションでは、セッションCookieだけがやり取りされます(ただし、Djangoがセッションデータの保存を終了する際には頭に入れておく必要があります)。

18
Ben Regenspan