質問

.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 はそれをサポートしていません。最良の方法は、すでに述べたように、値を任意の区切り文字で区切ってから文字列を分割することです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top