from django.shortcuts import render, redirect
from . import forms
from django.contrib.auth.forms import AuthenticationForm, PasswordChangeForm
from django.contrib.auth import authenticate, login , update_session_auth_hash, logout
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from posts.models import Post
from django.contrib.auth.views import LoginView, LogoutView
from django.urls import reverse_lazy
# Create your views here.
...
...
...
class UserLoginView(LoginView):
template_name = 'register.html'
# success_url = reverse_lazy('profile')
def get_success_url(self):
return reverse_lazy('profile')
def form_valid(self, form):
messages.success(self.request, 'Logged in Successful')
return super().form_valid(form)
def form_invalid(self, form):
messages.success(self.request, 'Logged in information incorrect')
return super().form_invalid(form)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['type'] = 'Login'
return context
...
...
...
এখানে, template_name হিসেবে 'register.html' রাখা হয়েছে, টেমপ্লেট ফাইলটি খেয়াল করলে দেখা যাবে সেখানে <form> ব্যবহার করা হয়েছে, কিন্ত আমরা 'register.html' ফাইলে ফর্ম পাঠালাম কিভাবে? উত্তর হলো- get_context_data মেথডে context এর মধ্যে পাঠানো হয়েছে ।
author/urls.py ফাইলটি নিচের মত করে লিখে ফেলি-
প্রজেক্টটি রান করে নতুন করে লগিন করলে দেখতে পাব আমাদের ক্লাস-বেসড লগইন মেকানিজম সঠিকভাবে কাজ করছে ।
এবার লগ-আউটের পালা । অবশ্য লগ-আউটের জন্য খুব বেশি কাজ করতে হবে না ।শুধু author/urls.py ফাইলটি নিচের মত করে লিখে ফেলি-
Code:: 11.3.2
author/urls.py
from django.contrib import admin
from django.urls import path, include
from . import views
from django.contrib.auth.views import LogoutView
urlpatterns = [
path('register/', views.register, name='register'),
# path('login/', views.user_login, name='user_login'),
path('login/', views.UserLoginView.as_view(), name='user_login'),
# path('logout/', views.user_logout, name='user_logout'),
path('logout/', views.LogoutView.as_view(), name='user_logout'),
path('profile/', views.profile, name='profile'),
path('profile/edit', views.edit_profile, name='edit_profile'),
path('profile/edit/pass_change/', views.pass_change, name='pass_change'),
]
এখানে , LogoutView ক্লাস-টি ইমপোর্ট করার পর সরাসরি ব্যবহার করা হয়েছে।
এখন আমরা ভিউ ক্লাসগুলোর যেগুলো এক্সেস করার জন্য ইউজার লগড-ইন থাকা প্রয়োজন সেগুলোতে ক্লাস-বেস login_required ডেকোরেটর এ্যাড করে ফেলি-