Как реализовать django.views.generic для logoutPage/loginPage, если ранее использовался запрос?

Какая лучшая практика для перехода с request на django.views.generic? Как реализовать django.views.generic для logoutPage/loginPage, если раньше использовался request?

#This my model.py
from django.db import models
from django.contrib.auth.models import User


#This my view.py

from django.shortcuts import render,redirect
from django.http import HttpResponse
from .models import *
from django.contrib.auth import login,logout,authenticate
from .forms import *
from django.views.generic import ListView



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

def loginPage(request):
    if request.user.is_authenticated:
        return redirect('home')
    else:
       if request.method=="POST":
        username=request.POST.get('username')
        password=request.POST.get('password')
        user=authenticate(request,username=username,password=password)
        if user is not None:
            print("working")
            login(request,user)
            return redirect('/')
       context={}
       return render(request,'book/templates/login.html',context)

Вы можете попробовать самый простой способ или чуть более сложный, но дающий больше возможностей в будущем.

Если вам не нужны никакие модификации (а обычно на ранней стадии они не нужны), вы можете сделать это прямо в вашем основном urls.py файле:

from django.contrib.auth import views as auth_views

urlpatterns = [
    ...
    path('login/', auth_views.LoginView.as_view(template_name='book/templates/login.html'), name='login'),
    path('logout/', auth_views.LogoutView.as_view(), name='logout'),
]

Альтернативно вы можете создавать свои собственные классы, которые наследуются от этих представлений. Очевидно, что вы можете задать соответствующие path() для каждого из них в urls.py.

from django.contrib.auth import views as auth_views

class LoginPage(auth_views.LoginView):
    template_name='book/templates/login.html'
    ...

class LoginPage(auth_views.LogoutView):
    ...

Для обоих вы можете установить страницу перенаправления с помощью переменных, установленных в settings.py с желаемым именем пути (это означает часть name="welcome"):

LOGIN_REDIRECT_URL = "user_profile"
LOGOUT_REDIRECT_URL = "come_back_please"
Вернуться на верх