teratail header banner
teratail header banner
質問するログイン新規登録
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2096閲覧

'HttpResponse' object has no attribute 'COOKIES'

yyjfou

総合スコア35

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/10/30 15:29

編集2020/10/31 03:35

0

0

djangoサーバー内でCOOKIESを発行させたいのですが、'HttpResponse' object has no attribute 'COOKIES' とエラーが出ました。

from django.shortcuts import render from django.views.generic import TemplateView from django.views.generic.base import View from django.contrib.auth.mixins import LoginRequiredMixin import json from django.views.decorators.csrf import csrf_exempt from django.http import HttpResponse from django.http.response import JsonResponse import datetime def index(request): user_cookie = set_cookie(request) now = user_cookie.COOKIES['time'] print(now) def set_cookie(request): access_log_time = datetime.datetime.now().strftime('%Y年%m月%d日%H時%M分') response = HttpResponse('Test') response.set_cookie('time', access_log_time, max_age=10000, expires=10000) return response

とコードを書きました。

https://www.gesource.jp/programming/python/django/021.html
https://blog.hirokiky.org/entry/2019/02/19/113422
を参考にしてコードを書きました。
'time', access_log_time とkeyとvalueを指定しているので、なぜエラーが出るのかわかりません。
アドバイスをお願いします。

----回答を受けて----
回答をいただいて

def index(request): user_cookie = set_cookie(request) def set_cookie(request): print(request.COOKIES['time']) access_log_time = datetime.datetime.now().strftime('%Y年%m月%d日%H時%M分') response = HttpResponse('Test') response.set_cookie('time', access_log_time, max_age=10000, expires=10000) #print(request.COOKIES['time']) にprintを移動させても同様にエラー return response

と書き換えてもKeyError: 'time' とエラーが出ます。
なのでcookieが発行できているのか確認できません。

何が問題でしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

エラーが出ている箇所はcookieを発行している部分ではなく、index関数のnow = user_cookie.COOKIES['time']の部分です。
COOKIES属性を持っているオブジェクトはレスポンスではなくリクエストオブジェクトです。

全体的にどのようなViewを作りたいのか分かりませんが、cookieを発行し、それを確認するViewであれば以下のようにすれば動くと思います。

python

1def index(request): 2 # リクエストのcookieを画面出力 3 print(request.COOKIES['time']) 4 5 # cookieを発行 6 access_log_time = datetime.datetime.now().strftime('%Y年%m月%d日%H時%M分') 7 response = HttpResponse('Test') 8 response.set_cookie('time', access_log_time, max_age=10000, expires=10000) 9 return response

また、発行されたcookieはブラウザ(chromeであればデベロッパーツールのアプリケーションタブ)から確認できるのでそちらも利用すると良いと思います。

投稿2020/10/31 01:57

technobic

総合スコア63

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yyjfou

2020/10/31 03:36

ありがとうございます!回答を受けて、質問文に追加しました。またご教授お願いします
technobic

2020/10/31 05:59

request.COOKIES['time']で「time」というcookieがないためエラーが出ています。 request.COOKIES.get('time')にしてみてください。
yyjfou

2020/10/31 12:09

ありがとうございます!できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問