2011-02-10 2 views
0

Django sessions을 사용하는 경우 세션 데이터가 이전에 설정되었는지 확인하고 초기 세션 데이터를 설정하지 않는 것이 동일한보기인지 확인하는 것이 좋습니다.Django 세션 : 세션 데이터를 확인하고 같은보기에서 설정할 수 있습니까?

사용자가 쿠키를 사용하지 않도록 설정하면 내 또는 사용자에게 심각한 문제가 발생합니까?

(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) 


장고, 내가 실수로 세션을 사용하여 관련하여 만든 눈부신 어떤 실수를 알고 싶어 내가 처음 사용합니다.

은 전문 지식을 주셔서 대단히 감사합니다 :)


편집 도움 :

그래서

단지 확인 : 사용자가 쿠키를 사용하지 않는 경우에,이 새로운 세션을 생성하지 않습니다 그가 보는 모든 페이지에 대한 데이터베이스의 항목? 권리?

답변

4

정확하게 맞습니다. 세션 데이터는 쿠키에 저장되지 않습니다. 쿠키는 세션 데이터베이스에 사용자 데이터의 고유 ID를 저장합니다.

하나의 보조 nit : 사용하지 마십시오 has_key - 그것은 수년간 파이썬에서 낙담했습니다. in 사용

if game_name in game_votes: 
+0

팁 주셔서 감사합니다. has_key를 사용하는 것보다 잘 알고 있어야합니다. –

+0

내 코드에 대한 주요 관심사는 다음과 같습니다. 사용자가 쿠키를 사용할 수없는 경우 내 코드가 방문하는 모든 페이지에 대해 데이터베이스에 새 세션을 추가합니까? 그들이 설정 중이라는 것을 알 수 없기 때문에? –

1

을 하나의보기에서 세션을 확인하고 다음 같은보기에서 변수를 설정하는 것이 완벽하게 괜찮 - 대부분의 시간, 나는 몇 가지 다른 뷰에서이 데이터를 필요로하기 위하여려고하는 경우 개인 함수 (이름 앞에 밑줄을 붙이는 것)를 만들고이를 호출하여 함수에 요청 매개 변수도 전달하므로 세션 데이터에 액세스 할 수 있습니다. 그런 다음 세션 데이터에 액세스해야하는 모든보기에서 데이터를 항상 사용할 수 있도록 시작시이 함수를 호출해야합니다.

+0

좋습니다, 조언 해 주셔서 감사합니다. 나는 내가 비슷한 것을 구현할 것이라고 생각한다 :) –

관련 문제