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

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

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

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

Python

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

Q&A

0回答

979閲覧

Django 会員登録後にログインした状態でのページ遷移する処理方法

enjyu

総合スコア11

Django

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

Python

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

0グッド

0クリップ

投稿2021/06/06 01:40

djangoでwebアプリを作成しているのですが、会員登録した直後にそのデータを用いてログインし、ログインしている必要があるページに遷移する処理がわかりません。
下記コードを実行すると、success_urlで指定したページに遷移せず、settings.pyで指定したページ('account:login')に遷移してしまいます。
登録画面から登録したあとに遷移した際のurlは、
http://127.0.0.1:8000/login?next=/home
となっているので、authenticateで認証できていないのが問題なのかと思いましたが、確かめる方法がわからずにいます。(printを使って中身を見たり?を考えられるのですが、実際には確かめられていないです。)

下記の2点を教えていただきたいです。
・会員登録後にログインした状態でのページ遷移方法
・このようなときのデバッグの仕方(問題発生箇所の調べ方)

また、上記の2点以外に突っ込みどころがあると思われますが、ご指摘いただけると幸いです。突っ込みどころに関しては、自ら調べて解決したいと思います。

当方、webに関して勉強し始めたばかりなので、常識的な知識が抜け落ちている可能性があります。また、不足している情報等ございましたら、ご指摘いただけると幸いです。
よろしくお願いいたします。

環境
python3.6.9
django 3.2.3
vscode

--views.py--

from django.contrib.auth import get_user_model,authenticate from django.contrib.auth.views import(LoginView, LogoutView) from django.contrib.auth.forms import AuthenticationForm from django.contrib.auth.mixins import LoginRequiredMixin from django.urls import reverse_lazy from django.views.generic import CreateView from .forms import UserCreationForm User = get_user_model() class LoginView(LoginView): template_name = 'account/login.html' form_class = AuthenticationForm login = LoginView.as_view() class SignUpView(CreateView): template_name = 'account/signup.html' form_class = UserCreationForm success_url = reverse_lazy('todo:home') def form_valid(self, form): response = super().form_valid(form) username = form.cleaned_data.get("username") raw_pw = form.cleaned_data.get("password") user = authenticate(username=username, password=raw_pw) login(self.request, user) return response sign_up = SignUpView.as_view() class Logout(LoginRequiredMixin, LogoutView): template_name = 'account/login.html' logout = LogoutView.as_view()

--forms.py--

from django.contrib.auth import get_user_model from django.contrib.auth.forms import UserCreationForm User = get_user_model() class UserCreationForm(UserCreationForm): count2field = ['username', 'password', 'password(confirm)'] class Meta: model = User fields = ('username', 'password1', 'password2',)

--urls.py--

from django.urls import path from . import views app_name= 'account' urlpatterns = [ path('login', views.login, name='login'), path('signup', views.sign_up, name="signup"), path('logout', views.logout, name="logout"), ]

--settings.py(一部抜粋)--

LOGIN_REDIRECT_URL = 'todo:home' LOGIN_URL = 'account:login' LOGOUT_REDIRECT_URL = 'account:login'

--signup.html--

{% extends 'base-login.html' %} {% load static widget_tweaks %} {% block main%} <div class="margin-login-height"></div> <div class="container-fluid "> <form action="" method="post"> <div> <div class="row"> <div class="login-box-width h-25 pt-5 mx-auto font-login">Username</div> </div> <div class="row"> <div class="login-box-width h-25 mx-auto"> {% render_field form.username class="form-control-login mb-3 " %} </div> </div> <div class="row"> <div class="login-box-width h-25 mx-auto font-login">Password</div> </div> <div class="row"> <div class="login-box-width h-25 mx-auto"> {% render_field form.password1 class="form-control-login mb-3 " %} </div> </div> <div class="row"> <div class="login-box-width h-25 mx-auto font-login">Password(確認)</div> </div> <div class="row"> <div class="login-box-width h-25 mx-auto"> {% render_field form.password2 class="form-control-login mb-3 " %} </div> </div> <div class="text-center pb-3 pt-5"> <button type="submit" class="btn-signup login-box-width h-25">Signup</button> </div> <div class="row"> <div class="error-message pt-3 pb-5 mx-auto"> {% for field in form %} {{ field.errors }} {% endfor %} </div> </div> <div class="text-center font-login-notification pt-2"> <a href="login" class="font-login-notification-link">ログイン画面</a> </div> </div> {% csrf_token %} </form> </div> <div class="margin-login-height"></div> {% endblock %}

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問