訪問者が選択した場所に基づいて異なるコンテンツを表示するWebサイトがあります。例:55812にZipとして入力します。どの都市と地域の緯度/経度がわかるか。つまり、そのエリアに関連するコンテンツを提供します。私の質問は、帰国時に郵便番号を常に入力する必要がないように、これをクッキーに保存するにはどうすればよいですか?
次のように表示されます。
クッキーの設定に関する確かな情報を見つけることができないようです。どんな助けも大歓迎です。
これは、永続的な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
UPDATE: Peter's answer 以下を組み込みソリューションで確認:
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
Cookieを手動で設定することもできますが、ユースケースに応じて(および将来、より多くのタイプの永続/セッションデータを追加する場合)、 Djangoのセッション機能 を使用する方が合理的かもしれません。これにより、 get and set 変数がユーザーのセッションCookieに内部的に関連付けられます。これの素晴らしい点は、ユーザーのセッションに関連付けられた多くのデータを保存する場合、すべてをCookieに保存すると、HTTPリクエストとレスポンスに大きな重みが加わることです。セッションでは、セッションCookieだけがやり取りされます(ただし、Djangoがセッションデータの保存を終了する際には頭に入れておく必要があります)。