Django は複数値の Cookie をサポートしていますか?
質問
.NETのものと同様に、Djangoを介していくつかの異なる値を持つCookieを設定したいと考えています。 HttpCookie.Values 財産。見てみると、 ドキュメンテーション, これが可能かどうかはわかりません。文字列を受け取るだけのようですが、別の方法はありますか?
配列を渡してみました([10, 20, 30]
) と辞書 ({'name': 'Scott', 'id': 1}
) ただし、文字列形式に変換されるだけです。私の現在の解決策は、任意の区切り文字を使用し、それを読み込むときにそれを解析することですが、これは不快に感じます。複数の値が不可能な場合、より良い方法はありますか?Cookie を大量に使用すると煩わしくなるため、あまり使いたくないのです。
解決
.NET の複数値 Cookie は、区切り文字を使用して Django で行っていることとまったく同じように機能します。彼らはあなたのためにそれを抽象化しただけです。あなたがやっていることは問題なく適切ですが、Django にはこの問題を「解決」するための具体的なものが何もないと思います。
複数の Cookie を使用しないという点では、あなたは正しいことをしていると言えます。今やっていることを実行することで、ネットワーク上のオーバーヘッドを低く抑えます。
他のヒント
もう少し抽象化されたものを探している場合は、次を使用してみてください。 セッション. 。それらが機能する方法は、データベースのレコードと一致する ID を Cookie に保存することだと思います。必要なものを何でも収納できます。探しているものとまったく同じではありませんが、少量の DB オーバーヘッドを気にしなければ機能する可能性があります。
(返事が遅くなりました!)
これはかさばりますが、常に Python の組み込みシリアル化を使用して呼び出します。
いつでも次のようなことができます。
import pickle
class MultiCookie():
def __init__(self,cookie=None,values=None):
if cookie != None:
try:
self.values = pickle.loads(cookie)
except:
# assume that it used to just hold a string value
self.values = cookie
elif values != None:
self.values = values
else:
self.values = None
def __str__(self):
return pickle.dumps(self.values)
次に、Cookie を取得できます。
newcookie = MultiCookie(cookie=request.COOKIES.get('multi'))
values_for_cookie = newcookie.values
または、値を設定します。
mylist = [ 1, 2, 3 ]
newcookie = MultiCookie(values=mylist)
request.set_cookie('multi',value=newcookie)
Django はそれをサポートしていません。最良の方法は、すでに述べたように、値を任意の区切り文字で区切ってから文字列を分割することです。