質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

2936閲覧

ログイン中のユーザーIDをViewで受け取りたい

退会済みユーザー

退会済みユーザー

総合スコア0

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/03/18 03:15

編集2019/03/18 03:39

Djangoで下記のようにカスタムユーザーログイン機能を作りました
(参考:https://github.com/akiyoko/django-book-mysite-sample

accounts/models.py

python

1途中略 2class CustomUser(AbstractUser): 3 """拡張ユーザーモデル""" 4 5 class Meta(AbstractUser.Meta): 6 db_table = 'custom_user' 7 8 # username をオーバーライドして NULL制約、ユニーク制約、入力必須制限を除去 9 username = models.CharField( 10 'ユーザー名', 11 max_length=150, 12 blank=True, 13 null=True, 14 help_text="半角アルファベット、半角数字、@/./+/-/_ で150文字以下にしてください。", 15 validators=[AbstractUser.username_validator], 16 ) 17 # email をオーバーライドして入力必須制限、ユニーク制約を付与 18 email = models.EmailField('メールアドレス', unique=True) 19 20 USERNAME_FIELD = 'email' 21 REQUIRED_FIELDS = [] 22 23 objects = CustomUserManager()

ログインしていればそのページを表示し、ログインしていなければログインページへ飛ばします
myapp/views.py

python

1途中略 2class NantokaView(LoginRequiredMixin, TemplateView): 3 login_url = '/accounts/login/' 4 template_name = 'nantoka.html'

ログイン中の場合、ユーザーをこんな感じで表示できています
templates/base.html

python

1{% if user.is_authenticated %} 2 {{ user.get_username }}さんログイン中 3{% endif %}

このテンプレートを表示する前のviews.pyの中で、ログイン中のユーザー情報を取得して利用したいのですが、そのようなことは可能でしょうか?LoginRequiredMixinの中にユーザーIDのプロパティがあったりするのでしょうか?継承するのがTemplateViewではダメだけどUpdateViewとかにすればいいのでしょうか?

開発環境はMac(Mojave)、Python3.7、Django2.1.7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Python

1class NantokaView(request,LoginRequiredMixin, TemplateView): 2 login_url = '/accounts/login/' 3 template_name = 'nantoka.html' 4 print(request.user)

投稿2019/03/18 03:56

編集2019/03/18 03:57
yamato_user

総合スコア2321

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/03/18 04:33

さっそくのご回答ありがとうございます! 書いてみたのですが、 NameError: name 'request' is not defined になってしまいました。 views.pyでインポートしてるのは from django.contrib.auth.mixins import LoginRequiredMixin from django.views.generic import TemplateView だけなので何か足りないのかと思い検索したのですが、わかりませんでした・・orz 何か思い当たる原因はありますでしょうか?
yamato_user

2019/03/18 04:38 編集

間違えました。クラスでビューを定義するときはget/postメソッドを明示してやります class NantokaView(LoginRequiredMixin, TemplateView):   login_url = '/accounts/login/'   template_name = 'nantoka.html'   def get(self, request, *args, **kwargs):     print(request.user) こんな具合に!後は自分の環境に合わせてみてください
退会済みユーザー

退会済みユーザー

2019/03/18 04:53 編集

ありがとうございます!なるほど、get/postメソッドを明示しなくてはいけないのですね。 とりあえずname 'request' is not definedにはならなくなりました。 今度は別のエラーが出ましたが、 (NantokaView didn't return an HttpResponse object.) ヒントもらえたので、もうちょっと自力で調べてみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問