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

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

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

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

Python

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

HTML

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

受付中

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

kakeru0225
kakeru0225

総合スコア35

Django

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

Python

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

HTML

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

0回答

0評価

0クリップ

63閲覧

投稿2022/08/06 04:35

前提

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

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

実現したいこと

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

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

該当のソースコード

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

python

{% load static %} {% load widget_tweaks %} {{ form.title.errors }} <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>ログイン</title> <link rel="stylesheet" href="{% static 'css/ueru_app/signup_1.css' %}"> </head> <header> <h2 class="title">アカウントへのログイン</h2> <p class="description">自身のアカウントへログインしよう</p> </header> <body> <form method='POST' form action="{% url 'record' %}" class='form'> {% csrf_token %} <p>ユーザー名</p> <br>{{ form.username | add_class:"form-control" }} <p>メールアドレス</p> <br>{{ form.email | add_class:"form-control" }} <p>パスワード</p> <br>{{ form.password | add_class:"form-control"}} <p>パスワード確認用</p> <br>{{ form.password1 | add_class:"form-control"}} {% if form.errors %} <ul class="error_message"> {% for error in form.username.errors %} <li>{{ error }}</li> {% endfor %} </ul> {% endif %} {% if form.errors %} <ul class="error_message"> {% for error in form.email.errors %} <li>{{ error }}</li> {% endfor %} </ul> {% endif %} {% if form.errors %} <ul class="error_message"> {% for error in form.password.errors %} <li>{{ error }}</li> {% endfor %} </ul> {% endif %} <input type='hidden' name= next value="{{next}}"> <input type='submit' value='始める' class="submit-bottun"> </form> </body> <footer> </footer> </html>

forms.py

python

from django import forms from ueru_app.models import CustomUser, Linguistic_HealthData from django.core.exceptions import ValidationError from django.contrib.auth.forms import AuthenticationForm class SignUpForm(forms.ModelForm): password = forms.CharField(max_length=20, widget=forms.PasswordInput()) password1 = forms.CharField(max_length=20, widget=forms.PasswordInput()) class Meta: model = CustomUser fields = ['username', 'email', 'password', 'password1'] def clean_email(self): email = self.cleaned_data['email'] if CustomUser.objects.filter(email=email).exists(): raise ValidationError("このメールアドレスは既に登録されています。他のメールアドレスを使用してください。") return email def clean_password(self): password = self.cleaned_data['password'] password1 = self.data.get('password1') if password != password1: self.add_error('password1', 'パスワードが一致しません。正しいパスワードを入力してください。') raise ValidationError('パスワードが一致しません。正しいパスワードを入力してください。') return password class LoginForm(AuthenticationForm): email = forms.CharField(max_length=50) password = forms.CharField(max_length=20, widget=forms.PasswordInput()) password1 = forms.CharField(max_length=20, widget=forms.PasswordInput()) class Meta: model = CustomUser fields = ['username', 'email', 'password', 'password1'] def clean_username(self): username = self.cleaned_data['username'] if not CustomUser.objects.filter(username=username).exists(): raise ValidationError("ユーザー名が正しくありません。") return username def clean_email(self): email = self.cleaned_data['email'] if not CustomUser.objects.filter(email=email).exists(): raise ValidationError("メールアドレスが正しくありません。") return email def clean_password(self): password = self.cleaned_data['password'] if not CustomUser.objects.filter(password=password).exists(): raise ValidationError("パスワードが正しくありません。") return password class HealthDataForm(forms.ModelForm): reason = forms.CharField(max_length=255, widget=forms.TextInput(attrs={'placeholder':'今日の、できごとや気持ち'})) action = forms.CharField(max_length=255, widget=forms.TextInput(attrs={'placeholder':'明日に向けての、姿勢や行動'})) class Meta: model = Linguistic_HealthData fields = ['condition', 'reason', 'action', 'message']

views.py

python

from django.shortcuts import render from django.views.generic import CreateView from django.urls import reverse_lazy from .forms import SignUpForm, LoginForm, HealthDataForm from django.contrib.auth import login, authenticate from django.contrib.auth.views import LoginView, LogoutView from django.contrib.auth.mixins import LoginRequiredMixin def introduce_1(request): return render(request, 'signup/introduce_1.html') def introduce_2(request): return render(request, 'signup/introduce_2.html') def introduce_3(request): return render(request, 'signup/introduce_3.html') class SignUpForm(CreateView): form_class = SignUpForm template_name = 'signup/signup_1.html' success_url = reverse_lazy('record') def form_valid(self, form): result = super().form_valid(form) user = self.object login(self.request, user) return result def signup_2(request): return render(request, 'signup/signup_2.html') def splash(request): return render(request, 'signup/splash.html') class LogInForm(LoginView): form_class = LoginForm template_name = 'signup/login.html' class record(CreateView): form_class = HealthDataForm template_name = 'record/record.html' success_url = reverse_lazy('record/record1.html') class record1(CreateView): form_class = HealthDataForm template_name = 'record/record1.html' success_url = reverse_lazy('record/record2.html') class record2(CreateView): form_class = HealthDataForm template_name = 'record/record2.html' success_url = reverse_lazy('record/record.html') class record4(CreateView): form_class = HealthDataForm template_name = 'record/record4.html' success_url = reverse_lazy('record/record.html') def post(self, request, *args, **kwargs): user = self.request.user

試したこと

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Django

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

Python

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

HTML

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