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 %}
あなたの回答
tips
プレビュー