0

Djangoセッションを使用する場合、同じビューでセッションデータが以前に設定されているかどうかを確認し、設定されていない場合は初期セッションデータを設定することをお勧めしますか?

ユーザーがCookieを無効にしている場合、これは私またはユーザーにとって大きな問題を引き起こしますか?

テストCookieの存在は私を少し混乱させました。しかし、これらを使用した場合、ユーザーが最初に表示したページに関するデータを記録することはできません。)


以下は私のviews.pyファイルからの抜粋です。ビューでは、ユーザーはゲームが掲載されているページにアクセスしています。

以前にセッションデータを保存していた場合、および初めてゲームを表示した場合、ビューはセッションデータを変更して、ゲームにアクセスしたという事実を記録します。セッションデータがない場合は、ここで初期化されます。

def game(request, game_name):
    game = get_object_or_404(Game, web_name=game_name)
    c = { 'game': game }

    # game_votes is used to store if user has voted on game yet.
    # Also a key in dictionary indicates user has previously visited that game.
    game_votes = request.session.get('game_votes', False):
    if game_votes:
        if not game_votes.has_key(game_name):
            game_votes[game_name] = False
            request.session['game_votes'] = game_votes
            request.session.modified = True
        else:
            pass
    else: # I.e. no session was declared previously.
        request.session['game_votes'] = { game_name: False }
        request.session['sorting_choice'] = 'PO'
        request.session['ip_address'] = request.META['HTTP_X_FORWARDED_FOR']

    return render_to_response('game.html', c)


Djangoを使用するのはこれが初めてなので、セッションの使用に関して不注意に犯した明白な間違いを知りたいと思いました。

あなたの専門知識と助けてくれてありがとう:)


編集:

確認するだけです。ユーザーがCookieを無効にしている場合、表示するすべてのページのデータベースに新しいセッションエントリが作成されませんか?右?

4

2 に答える 2

4

これはまさに正しいです。セッションデータはCookieに保存されません-Cookieは、ユーザーのデータの一意のIDをセッションデータベースに保存するだけです。

1つのマイナーな問題:使用しないでください-Pythonhas_keyでは何年もの間推奨されていません。使用in

if game_name in game_votes:
于 2011-02-10T21:57:37.850 に答える
1

単一のビューでセッションをチェックしてから、同じビューで変数を設定することはまったく問題ありません-ほとんどの場合、このデータをいくつかの異なるビューで必要とする場合は、プライベート関数を作成します(名前の前にアンダースコアを付けて)、それを呼び出してリクエストパラメータを関数にも渡すと、セッションデータにアクセスできるようになります。次に、セッションデータにアクセスする必要があるすべてのビューで、データが常に利用できるように、最初にこの関数を呼び出すようにします。

于 2011-02-10T21:59:45.707 に答える