How implement django.views.generic for logoutPage/loginPage if earlier used request?

59 Views Asked by At

What is the best practice for migration from request to django.views.generic? How implement django.views.generic for logoutPage/loginPage if earlier used 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)
1

There are 1 best solutions below

0
NixonSparrow On

You can try the simplest way or a slightly more complicated but giving more possibilities in the future.

If you don't need any modifications (and usually one doesn't at early stage), you can do it directly in your main urls.py file:

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'),
]

Alternatively you can create your own classes, that inherit from that views. Obviously, you can set proper path() for each in 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):
    ...

For both you can set redirect page with variables set in settings.py with wanted path name (it means the name="welcome" part):

LOGIN_REDIRECT_URL = "user_profile"
LOGOUT_REDIRECT_URL = "come_back_please"