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

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

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

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

Python

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

HTML

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

Q&A

0回答

376閲覧

【Django】LoginViewを用いてログインフォームを実装した際に、 「実際にログインができていない」という問題を解決したい

kakeru0225

総合スコア37

Django

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

Python

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

HTML

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

0グッド

1クリップ

投稿2022/08/06 04:35

前提

Djangoで、ログイン機能を実装しています。
LoginViewを用いてログインフォームを実装した際に、
「実際にログインができていない」という問題が発生いたしました。

ログインフォームに入力後、画面遷移をするとスーパーユーザーでログインしている状態になっており、ログイン機能が正常に動作していない状態でございます。
【ログインフォーム入力後画面】
イメージ説明

実現したいこと

  • ログイン機能を正常に動作させる

 (新規登録後の自動ログインは実装ができており、ログインフォームおよび、フォーム入力後の画面遷移は実装済みです。)

該当のソースコード

login.html(ログインフォームのテンプレート)

python

1{% load static %} 2{% load widget_tweaks %} 3{{ form.title.errors }} 4 5<!DOCTYPE html> 6<html lang="ja"> 7 8 <head> 9 <meta charset="UTF-8"> 10 <title>ログイン</title> 11 <link rel="stylesheet" href="{% static 'css/ueru_app/signup_1.css' %}"> 12 </head> 13 14 <header> 15 <h2 class="title">アカウントへのログイン</h2> 16 <p class="description">自身のアカウントへログインしよう</p> 17 </header> 18 19 <body> 20 <form method='POST' form action="{% url 'record' %}" class='form'> 21 {% csrf_token %} 22 <p>ユーザー名</p> 23 <br>{{ form.username | add_class:"form-control" }} 24 <p>メールアドレス</p> 25 <br>{{ form.email | add_class:"form-control" }} 26 <p>パスワード</p> 27 <br>{{ form.password | add_class:"form-control"}} 28 <p>パスワード確認用</p> 29 <br>{{ form.password1 | add_class:"form-control"}} 30 31 {% if form.errors %} 32 <ul class="error_message"> 33 {% for error in form.username.errors %} 34 <li>{{ error }}</li> 35 {% endfor %} 36 </ul> 37 {% endif %} 38 39 {% if form.errors %} 40 <ul class="error_message"> 41 {% for error in form.email.errors %} 42 <li>{{ error }}</li> 43 {% endfor %} 44 </ul> 45 {% endif %} 46 47 {% if form.errors %} 48 <ul class="error_message"> 49 {% for error in form.password.errors %} 50 <li>{{ error }}</li> 51 {% endfor %} 52 </ul> 53 {% endif %} 54 55 <input type='hidden' name= next value="{{next}}"> 56 <input type='submit' value='始める' class="submit-bottun"> 57 </form> 58 </body> 59 60 61 <footer> 62 </footer> 63 64 65</html>

forms.py

python

1from django import forms 2from ueru_app.models import CustomUser, Linguistic_HealthData 3from django.core.exceptions import ValidationError 4from django.contrib.auth.forms import AuthenticationForm 5 6 7class SignUpForm(forms.ModelForm): 8 password = forms.CharField(max_length=20, widget=forms.PasswordInput()) 9 password1 = forms.CharField(max_length=20, widget=forms.PasswordInput()) 10 11 class Meta: 12 model = CustomUser 13 fields = ['username', 'email', 'password', 'password1'] 14 15 def clean_email(self): 16 email = self.cleaned_data['email'] 17 if CustomUser.objects.filter(email=email).exists(): 18 raise ValidationError("このメールアドレスは既に登録されています。他のメールアドレスを使用してください。") 19 return email 20 21 def clean_password(self): 22 password = self.cleaned_data['password'] 23 password1 = self.data.get('password1') 24 if password != password1: 25 self.add_error('password1', 'パスワードが一致しません。正しいパスワードを入力してください。') 26 raise ValidationError('パスワードが一致しません。正しいパスワードを入力してください。') 27 return password 28 29class LoginForm(AuthenticationForm): 30 email = forms.CharField(max_length=50) 31 password = forms.CharField(max_length=20, widget=forms.PasswordInput()) 32 password1 = forms.CharField(max_length=20, widget=forms.PasswordInput()) 33 34 class Meta: 35 model = CustomUser 36 fields = ['username', 'email', 'password', 'password1'] 37 38 def clean_username(self): 39 username = self.cleaned_data['username'] 40 if not CustomUser.objects.filter(username=username).exists(): 41 raise ValidationError("ユーザー名が正しくありません。") 42 return username 43 44 def clean_email(self): 45 email = self.cleaned_data['email'] 46 if not CustomUser.objects.filter(email=email).exists(): 47 raise ValidationError("メールアドレスが正しくありません。") 48 return email 49 50 def clean_password(self): 51 password = self.cleaned_data['password'] 52 if not CustomUser.objects.filter(password=password).exists(): 53 raise ValidationError("パスワードが正しくありません。") 54 return password 55 56class HealthDataForm(forms.ModelForm): 57 reason = forms.CharField(max_length=255, widget=forms.TextInput(attrs={'placeholder':'今日の、できごとや気持ち'})) 58 action = forms.CharField(max_length=255, widget=forms.TextInput(attrs={'placeholder':'明日に向けての、姿勢や行動'})) 59 class Meta: 60 model = Linguistic_HealthData 61 fields = ['condition', 'reason', 'action', 'message']

views.py

python

1from django.shortcuts import render 2from django.views.generic import CreateView 3from django.urls import reverse_lazy 4from .forms import SignUpForm, LoginForm, HealthDataForm 5from django.contrib.auth import login, authenticate 6from django.contrib.auth.views import LoginView, LogoutView 7from django.contrib.auth.mixins import LoginRequiredMixin 8 9 10def introduce_1(request): 11 return render(request, 'signup/introduce_1.html') 12 13def introduce_2(request): 14 return render(request, 'signup/introduce_2.html') 15 16def introduce_3(request): 17 return render(request, 'signup/introduce_3.html') 18 19class SignUpForm(CreateView): 20 form_class = SignUpForm 21 template_name = 'signup/signup_1.html' 22 success_url = reverse_lazy('record') 23 24 def form_valid(self, form): 25 result = super().form_valid(form) 26 user = self.object 27 login(self.request, user) 28 return result 29 30def signup_2(request): 31 return render(request, 'signup/signup_2.html') 32 33def splash(request): 34 return render(request, 'signup/splash.html') 35 36class LogInForm(LoginView): 37 form_class = LoginForm 38 template_name = 'signup/login.html' 39 40class record(CreateView): 41 form_class = HealthDataForm 42 template_name = 'record/record.html' 43 success_url = reverse_lazy('record/record1.html') 44 45class record1(CreateView): 46 form_class = HealthDataForm 47 template_name = 'record/record1.html' 48 success_url = reverse_lazy('record/record2.html') 49 50class record2(CreateView): 51 form_class = HealthDataForm 52 template_name = 'record/record2.html' 53 success_url = reverse_lazy('record/record.html') 54 55class record4(CreateView): 56 form_class = HealthDataForm 57 template_name = 'record/record4.html' 58 success_url = reverse_lazy('record/record.html') 59 60 def post(self, request, *args, **kwargs): 61 user = self.request.user

試したこと

・LoginViewをつかったログインフォームの実装と、それに伴う例外処理(入力データとDBのデータが一致しない際のエラーの表示)は実装できてはいるのですが、
今回のエラーの原因と(html, forms, views, urls.py, settinngs.pyのどこかにあるかが分からず)、解決方法の双方が理解できておらず、
表題の件についてご教示頂けますと幸いでございます。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問