Перенаправление на определенную страницу после аутентификации из views.py - PullRequest
1 голос
/ 30 октября 2019

У меня есть три Html-страницы home.html, destination.html и login.html. Home.html имеет только кнопку, если я нажимаю на эту кнопку и если пользователь аутентифицирован, то он будет перенаправлен на destination.html, иначе на login.html (я использую встроенную функцию входа в систему и она работает правильно), когда пользовательимя пользователя, вошедшего в систему, появляется на странице home.html, но когда я снова нажимаю на кнопку, он снова перенаправляется в файл login.html.

views.py Это раздел views для home.html и destination.html, я использую встроенную функцию для аутентификации.

from django.contrib import auth
from django.shortcuts import redirect, render
from rest_framework.permissions import IsAuthenticated



def home(request):
    if request.method == 'POST':
        user = auth.authenticate()
        if user is IsAuthenticated:
            return render(request, 'destination.html')
        else:
            return redirect('login/')
    else:
        return render(request, 'home.html')
def destination(request):
    return render(request, 'destination.html')

urls. py

from django.contrib import admin
from django.urls import path
from newapp import views
from django.contrib.auth.views import LoginView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.home, name='home'),
    path('destination', views.destination, name= 'destination'),
    path('login/', LoginView.as_view(template_name='login.html')),
]

1 Ответ

1 голос
/ 30 октября 2019

Попробуйте это:

from django.contrib import auth
from django.shortcuts import redirect, render
from rest_framework.permissions import IsAuthenticated
from django.contrib.auth.decorators import login_required
from django.contrib.auth import authenticate, login, logout

def home(request):
    if request.method == 'POST':
        user = authenticate()
        if user is not None:
            login(request, user)
            return render(request, 'destination.html')
        else:
            return redirect('login/')
    else:
        return render(request, 'home.html')
@login_required
def destination(request):
    return render(request, 'destination.html')

Здесь мы проверяем пользователя на None или нет, а затем запускаем сеанс, из-за которого созданные данные не будут доступны, пока этот конкретный пользователь не вошел в систему. Донне забудьте упомянуть LOGIN_URL="/login/" в settings.py, что поможет предотвратить переход пользователей в destination.html путем манипулирования URL. Это будет возможно только если сессия включена.

...