2011-01-08 26 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は、現在のユーザー(ログインしていないかどうか、または認証されているかどうか)を挿入することにより、Web要求のステートレス性を処理するミドルウェアを提供します。 –

答えて

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は自動的にそのすべてを扱う(あなたは両方django.contrib.sessionsdjango.contrib.authを使用して)。

/edit:ユーザーのユーザー名を取得するには、ユーザーを認証する必要があります。その周りに良い方法はありません。

0

あなたの設定であなたのMIDDLEWARE_CLASSES設定でrequest.userビューにアクセスしてください。

http://docs.djangoproject.com/en/1.2/topics/auth/#authentication-in-web-requests

あなたは、あなたが直接、セッションやクッキーに対処する必要はありませんrequest.user.username

+0

私は正しくなったのですか? – craphunter

+0

あなたは@ piquadratのソリューションを使用する必要があると思います。 – takinbo

関連する問題