Как реализовать 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"