私は udacity の CS253 を調べて、Cookie とハッシュについて学んでいます。これでは、応答から Cookie を取得し、それが true のものと一致するかどうかを確認する必要があります。これは私のコードです
self.response.headers['Content-type'] = 'text/plain'
visits = 0
visit_cookie_str = self.request.cookies.get('visits')
if visit_cookie_str:
cookie_val = check_secure_val(visit_cookie_str)
if cookie_val:
visits = int(cookie_val)
しかし、これをアプリサーバーで実行すると、次のエラーが発生します。
invalid literal for int() with base 10: 'visits'
そのエラーの意味を調べました。ここで同じエラーについて多くの質問をしましたが、訪問を int として宣言しているため、コードがこのエラーを表示している理由をまだ理解していません。
これらは、ハッシュを作成およびチェックする関数です
def hash_str(s):
return hashlib.md5(s).hexdigest()
def make_secure_val(s):
return "%s|%s" % (s, hash_str(s))
def check_secure_val(h):
val = h.split('|')[0]
if h == make_secure_val(val):
return val
関数 check_secure_val が文字列を返すかどうかも確認しました
print check_secure_val("10|d3d9446802a44259755d38e6d163e820").isdigit()
ありがとう
編集:クッキーを設定するコードは
new_cookie_val = make_secure_val(str(visits))
self.response.headers.add_header('Set-Cookie', 'visits=%s' % new_cookie_val)
make_secure_val 関数は、(string, HASH) の形式で文字列を返します。
get 関数の全体のコードは、すべてこれです
def get(self):
self.response.headers['Content-type'] = 'text/plain'
visits = 0
visit_cookie_str = self.request.cookies.get('visits')
if visit_cookie_str:
cookie_val = check_secure_val(visit_cookie_str)
if cookie_val:
visits = int(cookie_val)
visits += 1
new_cookie_val = make_secure_val(str(visits))
self.response.headers.add_header('Set-Cookie', 'visits=%s' % new_cookie_val)
if visits > 100:
self.write("You're the best ever !")
else:
self.write("You've been here %s times" % visits)