2011-02-10 2 views
0

Django sessionsを使用する場合は、セッションデータが以前に設定されているかどうかを確認し、初期セッションデータを設定しない場合は同じビューで行うのがよいでしょうか?Djangoセッション:セッションデータを確認して同じビューで設定できますか?

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

test cookiesの存在が私を少し混乱しています。あなたはこれらを使用ただし場合は、ページについて最初に閲覧ユーザにデータを記録することはできません。)


抜粋です私の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) 


私はジャンゴを使用したのは初めてですが、私は私が誤ってセッションを使用に関して行われている明白な何の過ちを知りたいと思いました。だからチェックする

は、あなたの専門知識のために非常に感謝して:)


EDITを助け、ユーザーが無効にクッキーを持っている場合、これは新しいセッションを作成しません。彼が閲覧するすべてのページのデータベース内のエントリ?右?

答えて

4

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

1つのマイナーナイト:has_keyを使用しないでください。これは、Pythonでは長年使用されていません。 inを使用します。

if game_name in game_votes: 
+0

ヒントをいただきありがとうございます。私はhas_keyを使用するよりもよく知っていたはずです。 –

+0

私の主な懸念事項は、ユーザーがCookieを無効にしている場合、訪問したすべてのページのデータベースに新しいセッションが追加されますか?彼らは彼らが設定されているかどうかを知ることができないので? –

1

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

+0

アドバイスをいただきありがとうございます。私は非常に似て何かを実装すると思います:) –

関連する問題