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

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

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

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

Pythonista

Pythonistaは、iOS上でPythonプログラミングができる開発アプリです。さらに、Pythonの関数・変数などを自動で補完する便利なコードエディタや、PythonスクリプトをiOS上で多様な形で機能させる各種機能も内包しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

493閲覧

Djnagoでログインした後の遷移先を変えたい

Colton

総合スコア10

Django

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

Pythonista

Pythonistaは、iOS上でPythonプログラミングができる開発アプリです。さらに、Pythonの関数・変数などを自動で補完する便利なコードエディタや、PythonスクリプトをiOS上で多様な形で機能させる各種機能も内包しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2022/09/23 02:58

前提

Djangoでスケジュール調整Webアプリを作っています。
https://qiita.com/knakajima3027/items/34b2a105da7cdb411736
ここを参考にログイン機能を作りました。

実現したいこと

Djangoでログインした際に、データベースにあるユーザー情報を取得して、取得したデータによって
遷移先を変えたいです。

まずWebアプリにアクセスするとログイン画面が表示され、メアドとパスワードを入力しログインします。

そこで、ログインしたユーザーのユーザー情報を参照し、役職レコードがあるのでそこを見て、
役員(0)だったら、役員用のページ 平社員(1)だったら 平社員用のページ という感じです。

ログイン用アカウントのデータベースの中身

メールアドレス:yakuin@xxxxx.co.jp
Code:    1000(プライマリキー)
Name:   役員1 (その人の名前)
Post:    0 (0:役員、1:社員)
Belong:   0000 (その人の部署)

setting.py

python

1LANGUAGE_CODE = "ja" 2 3TIME_ZONE = "Asia/Tokyo" 4 5LOGIN_URL = "account:login" 6 7LOGIN_REDIRECT_URL = "account:home" 8 9LOGOUT_REDIRECT_URL = "account:top" 10 11USE_I18N = True 12 13USE_TZ = True 14 15 16# Static files (CSS, JavaScript, Images) 17# https://docs.djangoproject.com/en/4.1/howto/static-files/ 18 19STATIC_URL = "static/" 20 21STATICFILES_DIRS = (os.path.join(BASE_DIR,'static'),) 22 23# Default primary key field type 24# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field 25 26DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" 27 28AUTH_USER_MODEL = 'account.SyainMaster'

login.html

html

1{% extends "account/base.html" %} 2{% block title %}ログイン{% endblock %} 3 4{% block content %} 5<div class="container"> 6 <div class="head"> 7 <header> 8 <a class="headmoji">スケジュールアプリ</a> 9 </header> 10 </div> 11 <p>{{message}}</p> 12 <form action="{% url 'account:login'%}" method="post"> 13 {% csrf_token %} 14 {{ form.as_p }} 15 <p><input type="hidden" name="next" value="{{next}}"></p> 16 <p><input type="submit" value="ログイン"></p> 17 </form> 18</div> 19{% endblock %}

form.py

python

1class LoginForm(AuthenticationForm): 2 class Meta: 3 model = SyainMaster 4 fields = ['email', 'password']

views.py

Python

1class HomeView(LoginRequiredMixin, TemplateView): 2 3 def get(self, request, *args, **kwargs): 4 if request.POST['post'] == 0: 5 template_name = "account/Yakuinhome.html" <--ここが問題??? 6 else: 7 template_name = "account/Syainhome.html" 8 9 10 def get_context_data(self, **kwargs): 11 content = super().get_context_data(**kwargs) 12 content.update({ 13 'MendanMaster':MendanMaster.objects.all(), 14 }) 15 16 return content 17 18 19class LoginView(LoginView): 20 """ログインページ""" 21 form_class = forms.LoginForm 22 template_name = "account/login.html"

urls.py

Python

1from django.urls import path 2 3from . import views 4 5 6app_name="account" 7urlpatterns = [ 8 9 path("", views.LoginView.as_view(), name="login"), 10 path("", views.LogoutView.as_view(), name="logout"), 11 path("home/", views.HomeView.as_view(), name="home"), 12 path("sakusei/", views.CreateMendanView.as_view(), name="sakusei"), 13 path("itiran/", views.sakusei_view, name="itiran"), 14 path("Ysyousai/",views.SyousaiMendanView.as_view(), name="Ysyousai"), 15 path("Ysyousai_K/",views.Syousai_K_MendanView.as_view(), name="Ysyousai_K" ), 16 path("Syozoku/",views.SyozokuView.as_view(), name="Syozoku"), 17 path("Select/",views.SelectTimeView.as_view(), name="Select"), 18 path("Ssyousai/",views.SyainSyousaiMendanView.as_view(), name="Ssyousai"), 19 path("Ssyousai_K/",views.SyainSyousai_K_MendanView.as_view(), name="Ssyousai_K" ), 20 21]

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

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

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

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

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

m.ts10806

2022/09/23 03:32

>Djangoでログインした際に そもそもログインってDBにあるユーザ情報と照合するので 「ログイン」時点でユーザ情報取得できてるのでは。
Colton

2022/09/23 03:33

できてないんですよね..... どうやったら遷移先をわけられるんでしょうか...
m.ts10806

2022/09/23 07:13

では、まずログイン画面で入力された入力内容からDBを検索するところから。 それができれば検索結果のユーザ情報を見てリダイレクト もしくは、同じテンプレートファイルでも分岐により出力内容を変える。セッションも必要です。
guest

回答1

0

自己解決

def get(self)で、ユーザーの情報を取得し、 return [template_name] で テンプレートを更新できるようです。

views.py

Python

1class HomeView(LoginRequiredMixin, TemplateView): 2 3 template_name = "account/Yakuinhome.html" 4 5 def get_template_names(self): 6 7 if self.request.user.post == 0:  #ログインしたユーザーの「post」が「0」だった場合 8 template_name = "account/Yakuinhome.html" 9 else:              #そうじゃない場合 10 template_name = "account/Syainhome.html" 11 12 return [template_name] 13

投稿2022/09/27 08:06

Colton

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問