Django: не удается перенаправить на домашнюю страницу после входа в систему

#python #django #authentication #redirect

#python #django #аутентификация #перенаправление

Вопрос:

Я разрабатываю простую аутентификацию пользователя с великолепным интерфейсом. У него есть только одна учетная запись приложения. в приложении я создал представление «registerPage», и процесс регистрации работает нормально. Но для входа в систему я использую представление по умолчанию из django.contrib.auth. — Проблема в том, что после ввода адреса электронной почты и пароля для входа он должен перенаправляться на домашнюю страницу, но остается на той же странице входа

учетная запись / просмотры:

 from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.contrib.auth import authenticate, login, logout
from django.contrib import messages
from django.contrib.auth.decorators import login_required
# views here...
from .models import *
from .forms import CreateUserForm


def registerPage(request):        
    if request.method == 'POST':
        form = CreateUserForm(request.POST)
        if form.is_valid():
            form.save()
            user = form.cleaned_data.get('username')
            messages.success(request, 'Account was created for '   user)
            return redirect('login')
    else:
        form = CreateUserForm()
    context = {'form':form}
    return render(request, 'account/register.html', context)

def logoutPage(request):
    logout(request)
    return redirect('login')

@login_required
def homePage(request):
    context = {}
    return render(request, 'account/home.html', context)
  

учетная запись / URL-адреса:

 from django.urls import path
from . import views


urlpatterns = [
    path('', views.homePage, name="home"),
    path('register/', views.registerPage, name="register"),
    # path('login/', views.loginPage, name="login"),  
]
  

login.html : основной корпус

 <main class="login-body" data-vide-bg="{% static 'img/login-bg.mp4' %}">
        <!-- Login Admin -->
        <form class="form-signin" action="" method="POST">
            {% csrf_token %}
            <div class="login-form">
                <!-- logo-login -->
                <div class="logo-login">
                    <a href="{% url 'home' %}"><img src="{% static 'img/logo/loder.png' %}" alt=""></a>
                </div>
                {% for message in messages %}
                    <div class="alert alert-{{ message.tags }}">
                        {{ message }}
                    </div>
                {% endfor %}

                <h2>Login Here</h2>
                <div class="form-input">
                    <label for="name">Email</label>
                    <input  type="email" name="email" placeholder="Email">
                </div>
                <div class="form-input">
                    <label for="name">Password</label>
                    <input type="password" name="password" placeholder="Password">
                </div>

                <!-- {% if request.GET.next %}
                    <input type="hidden" name="next" value="{{ request.GET.next }}">
                {% endif %} -->
                <div class="form-input pt-30">
                    <input type="submit" name="submit" value="login">
                </div>

                Don't have an account ? <a href="{% url 'register' %}" class="register"> Sign-up </a>
            </div>
        </form>
        <!-- /end login form -->

    </main>
  

URL-адреса проекта:

 from django.contrib import admin
from django.urls import path, include
from django.contrib.auth import views as auth_views
from account import views as acc_views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('register/', acc_views.registerPage, name='register'),
    path('login/', auth_views.LoginView.as_view(template_name='account/login.html'), name='login'),
    path('logout/', auth_views.LogoutView.as_view(template_name='account/logout.html'), name='logout'),
    path('', include('account.urls')),
]
  

Я также добавил этот маршрут в settings.py файл:

 LOGIN_REDIRECT_URL = 'home'

LOGIN_URL = 'login'
  

Комментарии:

1. Показать ваши представления входа в систему

2. Я использовал представления входа по умолчанию из django.contrib.auth, см. Мой файл urls проекта выше.

3. Добавление {{ form.errors }} в ваш шаблон может помочь устранить проблему. Попробуйте использовать пример формы входа в систему из документации . Если это работает, то проблема в вашем login.html . Например, я думаю, что это, вероятно, должно быть name="username" вместо `name =»email».

4. Большое вам спасибо, на самом деле документы мне помогают. Большое спасибо, друг! @Alasdair

Ответ №1:

Редактировать LOGIN_REDIRECT_URL = 'home' -> LOGIN_REDIRECT_URL = '/'

Это должно сработать

Комментарии:

1. к сожалению, это не так!

2. Такое простое решение! Я благодарю вас!