#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. Такое простое решение! Я благодарю вас!