2011-01-08 12 views
2

나는 django의 백엔드 솔루션을 사용합니다. 나는 쿠키에서 사용자 이름을 얻거나 session_key를 사용하여 사용자를 알기 원합니다. 내가 어떻게 할 수 있니?쿠키에서 사용자 이름 가져 오기

from django.contrib.auth.models import User 
from django.contrib.sessions.models import Session 

def start(request, template_name="registration/my_account.html"): 
    user_id = request.session.get('session_key') 
    if user_id: 
     name = request.user.username 
     return render_to_response(template_name, locals()) 
    else: 
     return render_to_response('account/noauth.html') 

그 밖의 경우입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

내가 인증 한 바로 그 사람이 로그인 한 것을 의미합니까?

-> 알았어! 첫째, 질문에 대한 설명이있는 경우 질문을 업데이트하거나, 답변을 게시하거나, 다른 질문을 게시하지 마십시오. 둘째, 사용자가 로그 아웃 한 경우 정의에 따라 사용자 이름이 없습니다.

쿠키를 사용하면 사용자를 다시 식별 할 수 있다는 장점이 있습니다. 나는 그저 웹 페이지에 그의 이름을 올리고 싶다. 그가 밖으로 로그 아웃하더라도. 아니면 가능하지 않습니까?

+0

를 사용하여 사용자 이름을 액세스 할 수 있습니다. Django는 현재 사용자 (익명 사용자 - 로그인하지 않은 사용자 - 또는 인증 된 사용자)를 삽입하여 웹 요청의 무국적자를 처리하는 미들웨어를 제공합니다. 올바른 미들웨어가 설치되어 있다면 request.user가 항상있을 것입니다. –

답변

1

piquadrat 절대적으로 정답을 가지고 있지만, 어떤 이유로 당신이 세션에서 사용자를 얻을 필요가 없다면, 당신은 세션 개체에 get_decoded() 전화 : 당신은 AuthenticationMiddleware 및 SessionMiddleware를 활성화해야합니다

session_data = request.session.get_decoded() 
user_id = session_data['_auth_user_id'] 
+0

그러나 어떻게하면 사용자 이름을 얻을 수 있습니까? 그냥 : name = request.user.username? – craphunter

4

is_authenticated 메서드를 호출하여 사용자의 인증 여부를 확인할 수 있습니다. 코드는 다음과 같이 다소 보일 것이다

def start(request, template_name="registration/my_account.html"): 
    if request.user.is_authenticated(): 
     name = request.user.username 
     return render_to_response(template_name, locals()) 
    else: 
     return render_to_response('account/noauth.html') 

세션을 직접 액세스 할 필요가 장고가 자동으로 모든 처리 (둘 다 django.contrib.sessionsdjango.contrib.auth를 사용하는 경우).

/edit : 사용자의 사용자 이름을 갖기 위해 그는 인증을 받아야합니다. 그 주위에는 좋은 방법이 없습니다.

관련 문제