2

まず、質問に入る前に、これを達成するためのより適切な方法があれば教えてください。おそらくそれを使用できると思います。

わかりましたので、アプリケーションに REST API を追加して、ユーザーがブラウザを使用せずにログインし、いくつかの変更を加え、ログアウトできるようにする必要があります。私が書いた api_login ビューで session_key を返してから、リクエストごとにセッション キーを返してもらうことにしました。たとえば、

def login(request):
    ... all the django auth code I have
    # login adds the information to the request right?
    login (request, user)
    return simplejson.dumps({'key': request.session.session_key})

私が直面している問題は、後でsession_key次のように使用しようとすることですが、これは奇妙に失敗します

key = request.GET['key']
my_session = SessionStore(session_key=key)
my_session.session_key == key
>>> True
my_session.values()
>>> []
my_session.session_key == key
>>> False

ご覧のとおり、適切なキーを使用してデータベースから SessionStore オブジェクトを取得します。しかし、そこから値を取得しようとすると、空が返され、基になるキーが変更されます。これに関するアドバイスをいただければ幸いです。

4

1 に答える 1

3

Djangoはセッションキーを知っているか、それ自体を生成する必要があるようです。私の推測では、ランダムなキーをフィードしているか、何も知らないキーをフィードしています(保存されていないため)。あなたの例は私のシェルでもまったく同じように機能します。これが私の例です:

>>> from django.contrib.sessions.backends.db import SessionStore
>>> key = 'asdf1234'
>>> my_session = SessionStore(session_key=key)
>>> my_session.session_key == key
True
>>> my_session['foo'] = 'bar'
>>> my_session.values()
['bar']
>>> my_session.session_key == key
False
>>> my_session.session_key
'358d6515b129631d89249687790adc49'
>>> my_session.save()

その後、戻ってきます:

>>> from django.contrib.sessions.backends.db import SessionStore
>>> my_session = SessionStore(session_key='358d6515b129631d89249687790adc49')
>>> my_session.values()
['bar']

だから、それをやらせて、セッションを保存することを忘れないでください。

于 2012-12-06T23:23:04.850 に答える