Django ডেকোরেটর একটি খুবই শক্তিশালী টুল, যা ফাংশন বা ক্লাসে অতিরিক্ত ফাংশনালিটি যুক্ত করতে ব্যবহৃত হয়। বিশেষত, login_required এবং permission_required ডেকোরেটরগুলি সাধারণত ব্যবহারকারীর অথেনটিকেশন এবং অনুমতিগুলি পরিচালনা করতে ব্যবহৃত হয়। এই ডেকোরেটরগুলির মাধ্যমে আপনি নির্দিষ্ট ভিউ বা ফাংশনগুলোতে অ্যাক্সেস নিয়ন্ত্রণ করতে পারেন।
এখানে আমরা দেখব login_required এবং permission_required ডেকোরেটরের ব্যবহার কীভাবে করা হয়।
১. login_required ডেকোরেটর
login_required ডেকোরেটরটি নিশ্চিত করে যে, যে ভিউটি ব্যবহার করা হচ্ছে, সেটি শুধুমাত্র লগইন করা ব্যবহারকারীর জন্য প্রবেশযোগ্য হবে। যদি ব্যবহারকারী লগইন না করে ভিউতে প্রবেশ করতে চায়, তাহলে তাকে স্বয়ংক্রিয়ভাবে লগইন পেজে রিডিরেক্ট করা হবে।
ডেকোরেটর ব্যবহার করা
প্রথমে, আপনাকে Django এর login_required ডেকোরেটরটি ইমপোর্ট করতে হবে:
from django.contrib.auth.decorators import login_required
এখন, আপনি যেকোনো ভিউ ফাংশনে এটি ব্যবহার করতে পারেন:
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
@login_required
def my_view(request):
return render(request, 'my_template.html')
এখানে:
@login_requiredডেকোরেটরটি ভিউ ফাংশনের উপরে যুক্ত করা হয়েছে, যা নিশ্চিত করবে যে, শুধুমাত্র লগইন করা ব্যবহারকারীরা এই ভিউটি অ্যাক্সেস করতে পারবে।- যদি ব্যবহারকারী লগইন না করে এই ভিউতে প্রবেশ করার চেষ্টা করে, তাহলে তাকে স্বয়ংক্রিয়ভাবে
LOGIN_URL(যেটি সাধারণত/login/অথবা সেট করা URL) এ রিডিরেক্ট করা হবে।
কাস্টম রিডিরেকশন ইউআরএল
আপনি যদি চাইলে লগইন না করা ব্যবহারকারীদের একটি নির্দিষ্ট পেজে রিডিরেক্ট করতে পারেন। এটি করার জন্য LOGIN_URL সেট করতে হবে।
# settings.py
LOGIN_URL = '/user/login/'
এটি ব্যবহারকারীকে /user/login/ পেজে রিডিরেক্ট করবে যদি তারা লগইন না থাকে।
২. permission_required ডেকোরেটর
permission_required ডেকোরেটরটি নির্দিষ্ট একটি অনুমতির সাথে সম্পর্কিত ভিউ অ্যাক্সেস নিয়ন্ত্রণ করতে ব্যবহৃত হয়। এটি নিশ্চিত করে যে ব্যবহারকারীর কাছে নির্দিষ্ট permission থাকতে হবে, তবেই তারা সেই ভিউ অ্যাক্সেস করতে পারবে।
ডেকোরেটর ব্যবহার করা
permission_required ডেকোরেটরটি ব্যবহার করার জন্য আপনাকে প্রথমে এটি ইমপোর্ট করতে হবে:
from django.contrib.auth.decorators import permission_required
এখন, আপনি এটিকে ব্যবহার করতে পারেন:
from django.contrib.auth.decorators import permission_required
from django.shortcuts import render
@permission_required('app_name.can_edit', raise_exception=True)
def edit_view(request):
return render(request, 'edit_template.html')
এখানে:
'app_name.can_edit': এটি একটি কাস্টম পারমিশন যা আপনি মডেল বা অ্যাপের জন্য তৈরি করেছেন। এটি<app_name>.<permission>ফরম্যাটে হবে। এখানেcan_editহলো কাস্টম পারমিশন যা আপনি ডিফাইন করেছেন।raise_exception=True: যদি ব্যবহারকারীর কাছে যথাযথ অনুমতি না থাকে, তাহলে একটিPermissionDeniedএক্সসেপশন ফেলা হবে।
কাস্টম পারমিশন তৈরি করা
আপনি যদি কাস্টম পারমিশন তৈরি করতে চান, তাহলে তা মডেল ক্লাসের মধ্যে Meta ক্লাসের মাধ্যমে করা যায়।
from django.db import models
class MyModel(models.Model):
name = models.CharField(max_length=100)
class Meta:
permissions = [
("can_edit", "Can Edit the object"),
("can_view", "Can View the object"),
]
এখানে permissions লিস্টে আপনি কাস্টম পারমিশন ডিফাইন করেছেন। এর পর ব্যবহারকারীকে এই পারমিশন দেওয়া হবে অ্যাডমিন প্যানেল অথবা ডাটাবেস ম্যানেজমেন্টের মাধ্যমে।
৩. @user_passes_test ডেকোরেটর
@user_passes_test ডেকোরেটরটি ব্যবহারকারীর একটি কাস্টম চেকের মাধ্যমে অ্যাক্সেস নিয়ন্ত্রণ করার জন্য ব্যবহার করা হয়। এটি একটি ফাংশন নেয়, যা True বা False রিটার্ন করে, এবং True হলে ব্যবহারকারী ভিউ অ্যাক্সেস করতে পারবে, অন্যথায় রিডিরেক্ট হবে।
ডেকোরেটর ব্যবহার করা
from django.contrib.auth.decorators import user_passes_test
def user_is_admin(user):
return user.is_staff # ব্যবহারকারী যদি স্টাফ হয়, তবেই True রিটার্ন হবে
@user_passes_test(user_is_admin)
def admin_view(request):
return render(request, 'admin_template.html')
এখানে:
user_is_adminফাংশনটি একটি কাস্টম চেক যা যাচাই করে ব্যবহারকারী স্টাফ (অ্যাডমিন) কিনা। যদি ব্যবহারকারী স্টাফ হয়, তাহলে তারা এই ভিউটি অ্যাক্সেস করতে পারবে।
সারাংশ
login_requiredডেকোরেটরটি ব্যবহারকারীকে লগইন করার পূর্বে নির্দিষ্ট ভিউ অ্যাক্সেস করতে দেয় না। এটি এক্সেস কন্ট্রোলের জন্য খুবই প্রয়োজনীয়।permission_requiredডেকোরেটরটি একটি নির্দিষ্ট পারমিশনের মাধ্যমে ভিউয়ের অ্যাক্সেস নিয়ন্ত্রণ করে।user_passes_testডেকোরেটরটি ব্যবহারকারীর জন্য কাস্টম শর্ত তৈরি করে ভিউ অ্যাক্সেস নিয়ন্ত্রণ করতে সাহায্য করে।
এগুলো Django এর অন্যতম শক্তিশালী টুল, যেগুলি অ্যাপ্লিকেশন নিরাপত্তা এবং অ্যাক্সেস কন্ট্রোল নিশ্চিত করার জন্য অত্যন্ত গুরুত্বপূর্ণ।
Read more