web-dev-qa-db-ja.com

Djangoでrequest.userは何を参照していますか?

Djangoでrequest.userが何を参照しているかについて混乱していますか? auth_userテーブルのsernameフィールドを参照していますか、それともユーザーモデルインスタンスを参照していますか?

{{request.user.username}}または{{user.username}}を使用してテンプレートの電子メールフィールドにアクセスできなかったため、この疑問がありました。

だから代わりに私はビューファイルで次のことをしました:

userr = User.objects.get(username=request.user)

userrをテンプレートに渡し、{{ userr.email }}として電子メールフィールドにアクセスしました。

動作しますが、私はそれについていくらか明確にしたかったです。

21
himalayanZephyr

テンプレートが AnonymousUser を受け取っている場合、{{request.user.email}}への参照は見つかりません。以前は、{{request.user.is_authenticated }}かどうかを尋ねる必要があります。

設定のDjango.core.context_processors.authセクションにTEMPLATE_CONTEXT_PROCESSORSコンテキストプロセッサが含まれているかどうかを確認する必要があります。 Django 1.4または最新の場合)を使用している場合、コンテキストプロセッサはDjango.contrib.auth.context_processors.authです。このコンテキストプロセッサは、すべての要求にユーザーオブジェクトを含める必要があります。

11
emigue

request.userはユーザーモデルオブジェクトです。

requestを明示的に渡さないと、テンプレート内のリクエストオブジェクトにアクセスできません。テンプレートからユーザーオブジェクトにアクセスする場合は、テンプレートに渡すか、RequestContextを使用する必要があります。

13
falsetru

設定内容によって異なります。

だから、使用する方が良い

user = User.objects.get(username=request.user.username)

実際、'Django.core.context_processors.request'TEMPLATE_CONTEXT_PROCESSORSリストにsettings.pyを追加する場合、そのような変数を定義する必要はありません。

views.pyrenderを使用している場合、テンプレートの変数{{request.user.username}}にアクセスできます

2
suhailvs

request.userは、実際のユーザーモデルインスタンスを指します。

request.user.FIELDNAMEを使用すると、ユーザーモデルのすべてのフィールドにアクセスできます。

0
jammas615