ব্যবহারকারীর প্রয়োজন অনুযায়ী বিভিন্ন সেটিংস (যেমন থিম কালার, ভাষা, ইত্যাদি) ডাইনামিকভাবে কনফিগার করতে এবং সংরক্ষণ করতে, django-dynamic-preferences একটি ভালো সমাধান হতে পারে। এই লাইব্রেরি ব্যবহার করে আপনি global এবং per-user preferences সংরক্ষণ করতে পারবেন, যা Django অ্যাপ্লিকেশনকে flexible এবং কাস্টমাইজযোগ্য করে তোলে।
লাইব্রেরি: django-dynamic-preferences
এই লাইব্রেরি ব্যবহার করে ব্যবহারকারীরা তাদের ব্যক্তিগত প্রয়োজন অনুযায়ী থিম কালার, ভাষা এবং অন্যান্য সেটিংস কাস্টমাইজ করতে পারবে এবং এডমিন প্যানেল থেকে এগুলো ম্যানেজ করা যাবে।
ইনস্টলেশন এবং সেটআপ:
- লাইব্রেরি ইনস্টলেশন:
pip install django-dynamic-preferences
ধাপ ১: আপনার অ্যাপ তৈরি করুন (যদি না থাকে)
যদি আপনার অ্যাপ না থাকে, তবে একটি অ্যাপ তৈরি করতে হবে। ধরুন, আপনার অ্যাপের নাম হবে user_settings। এজন্য নিম্নলিখিত কমান্ড দিয়ে একটি অ্যাপ তৈরি করুন:
python manage.py startapp user_settings
এতে একটি অ্যাপ ফোল্ডার তৈরি হবে। উদাহরণস্বরূপ:
my_project/
└── user_settings/
├── __init__.py
├── admin.py
├── apps.py
├── migrations/
├── models.py
├── tests.py
├── views.py
ধাপ ২: preferences.py ফাইল তৈরি করা
এখন আপনি এই অ্যাপ ফোল্ডারের ভিতরে preferences.py নামে একটি নতুন ফাইল তৈরি করবেন:
my_project/
└── user_settings/
├── __init__.py
├── admin.py
├── apps.py
├── preferences.py # এই ফাইলটি তৈরি করুন
├── models.py
├── views.py
১. প্রেফারেন্স রেজিস্ট্রি (Preference Registry):
ব্যবহারকারীর প্রেফারেন্স সেট করতে রেজিস্ট্রেশন করতে হবে।
# preferences.py
from dynamic_preferences.types import StringPreference
from dynamic_preferences.preferences import Section
from dynamic_preferences.registries import user_preferences_registry
# নতুন সেকশন তৈরি করছি
theme = Section('theme')
# থিম কালার প্রেফারেন্স তৈরি
@user_preferences_registry.register
class ThemeColor(StringPreference):
section = theme
name = 'theme_color'
default = 'light'
help_text = 'User preferred theme color'
# ভাষা প্রেফারেন্স তৈরি
@user_preferences_registry.register
class Language(StringPreference):
section = theme
name = 'language'
default = 'en'
help_text = 'Preferred language'
ধাপ ৪: অ্যাপটিকে INSTALLED_APPS এ যোগ করা
এই ফাইলটি অ্যাপের অংশ হওয়ার জন্য আপনাকে user_settings অ্যাপটিকে settings.py এর INSTALLED_APPS এ যোগ করতে হবে:
# settings.py
INSTALLED_APPS = [
...
'dynamic_preferences',
'dynamic_preferences.users.apps.UserPreferencesConfig', # ব্যবহারকারীর প্রেফারেন্সের জন্য
'user_settings', # নতুন অ্যাপ যুক্ত করা
]
ধাপ ৫: মাইগ্রেশন চালানো
এখন আপনাকে মাইগ্রেশন চালাতে হবে, যাতে dynamic preferences ডাটাবেসে যোগ হয়:
python manage.py migrate
ধাপ ৬: প্রেফারেন্স ব্যবহার করা
আপনার views.py বা অন্য যেকোনো ফাইলে প্রেফারেন্সগুলো অ্যাক্সেস করে আপনি ব্যবহারকারীর পছন্দ অনুযায়ী অ্যাপ্লিকেশনের সেটিংস পরিবর্তন করতে পারবেন। উদাহরণ:
# views.py
from dynamic_preferences.users.registries import user_preferences_registry
def user_dashboard(request):
# ব্যবহারকারীর প্রেফারেন্স অ্যাক্সেস করা
user_preferences = user_preferences_registry.manager(request.user)
theme_color = user_preferences['theme__theme_color']
language = user_preferences['theme__language']
# প্রেফারেন্স অনুযায়ী রেন্ডার করা
return render(request, 'dashboard.html', {
'theme_color': theme_color,
'language': language,
})
৪. টেমপ্লেটের উদাহরণ:
<!DOCTYPE html>
<html lang="{{ language }}">
<head>
<style>
body {
background-color: {% if theme_color == 'dark' %} #333 {% else %} #fff {% endif %};
color: {% if theme_color == 'dark' %} #fff {% else %} #000 {% endif %};
}
</style>
</head>
<body>
<h1>Welcome to your Dashboard</h1>
<p>Your theme is set to: {{ theme_color }}</p>
<p>Your preferred language is: {{ language }}</p>
</body>
</html>
ধাপ ৭: এডমিন প্যানেলে প্রেফারেন্স ম্যানেজ করা
এখন, আপনি এডমিন প্যানেলে গিয়ে ব্যবহারকারীর প্রেফারেন্সগুলো (যেমন থিম কালার, ভাষা) পরিবর্তন করতে পারবেন। এই পরিবর্তনগুলো আপনার কোডে অ্যাক্সেস করা যাবে এবং টেমপ্লেটে দেখা যাবে।
একজন ব্যবহারকারী তার নিজের জন্য কাস্টম সেটিংস
একজন ব্যবহারকারী তার নিজের জন্য কাস্টম সেটিংস (যেমন থিম কালার, ভাষা ইত্যাদি) সেট করতে পারে, যদি আপনি django-dynamic-preferences লাইব্রেরি ব্যবহার করেন। এটি ব্যবহার করে আপনি প্রতিটি ব্যবহারকারীর জন্য আলাদা প্রেফারেন্স সংরক্ষণ করতে পারবেন। আমি ধাপে ধাপে ব্যাখ্যা করছি কীভাবে একজন ব্যবহারকারী তার প্রেফারেন্স পরিবর্তন করতে পারবে।
ধাপ ১: প্রয়োজনীয় সেটআপ করা
যদি আপনি আগে থেকে django-dynamic-preferences সেটআপ না করে থাকেন, তাহলে প্রথমে সেটআপ করতে হবে। পূর্ববর্তী উত্তরে সেটআপের ধাপগুলো আলোচনা করা হয়েছে, যেগুলো অনুসরণ করে আপনাকে লাইব্রেরিটি ইনস্টল এবং কনফিগার করতে হবে।
ধাপ ২: ব্যবহারকারীর জন্য প্রেফারেন্স ফর্ম তৈরি করা
আপনাকে প্রতিটি ব্যবহারকারীকে তার নিজের প্রেফারেন্স পরিবর্তন করার জন্য একটি ফর্ম তৈরি করতে হবে। ধরুন, থিম কালার এবং ভাষার প্রেফারেন্স ব্যবহারকারী নিজে পরিবর্তন করতে পারবে।
forms.py ফাইলে ফর্ম তৈরি:
# forms.py
from django import forms
from dynamic_preferences.users.forms import UserPreferenceForm
class UserSettingsForm(UserPreferenceForm):
class Meta(UserPreferenceForm.Meta):
fields = ['theme__theme_color', 'theme__language'] # যেসব ফিল্ড ব্যবহারকারী পরিবর্তন করতে পারবে
এই ফর্মটি ব্যবহারকারীর থিম কালার এবং ভাষা পরিবর্তন করার সুযোগ দেবে।
ধাপ ৩: ভিউ তৈরি করা
এখন, একটি ভিউ তৈরি করা হবে যা ফর্মটি রেন্ডার করবে এবং ব্যবহারকারীর ইনপুট অনুযায়ী প্রেফারেন্স সংরক্ষণ করবে।
views.py ফাইলে ভিউ:
# views.py
from django.shortcuts import render, redirect
from .forms import UserSettingsForm
from django.contrib import messages
def user_settings_view(request):
# ফর্ম ইনস্ট্যান্স তৈরি করা
if request.method == 'POST':
form = UserSettingsForm(request.POST, instance=request.user)
if form.is_valid():
form.save() # ফর্ম সেভ করা
messages.success(request, 'Your settings have been updated.')
return redirect('user_settings') # রিডিরেক্ট করে আবার সেটিংস পেজে নেওয়া
else:
form = UserSettingsForm(instance=request.user)
return render(request, 'user_settings.html', {'form': form})
ধাপ ৪: টেমপ্লেট তৈরি করা
এখন একটি টেমপ্লেট তৈরি করুন, যেখানে ব্যবহারকারীরা তাদের থিম কালার এবং ভাষার প্রেফারেন্স পরিবর্তন করতে পারবে।
user_settings.html টেমপ্লেট:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>User Settings</title>
</head>
<body>
<h1>Update Your Settings</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }} <!-- ফর্ম ফিল্ড গুলো রেন্ডার হবে -->
<button type="submit">Save Settings</button>
</form>
{% if messages %}
<ul>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
</body>
</html>
ধাপ ৫: URL কনফিগার করা
এখন এই ভিউটিকে URL এ ম্যাপ করতে হবে, যাতে ব্যবহারকারী তার প্রেফারেন্স পেজে যেতে পারে।
urls.py ফাইলে:
# urls.py
from django.urls import path
from .views import user_settings_view
urlpatterns = [
path('settings/', user_settings_view, name='user_settings'),
]
ধাপ ৬: প্রেফারেন্স অ্যাক্সেস এবং প্রয়োগ করা
ব্যবহারকারী যখন তার প্রেফারেন্স সেভ করবে, তখন আপনি এটি অ্যাক্সেস করে ব্যবহার করতে পারবেন। উদাহরণস্বরূপ, আপনি ব্যবহারকারীর প্রেফারেন্স অনুযায়ী থিম কালার এবং ভাষা ব্যবহার করতে পারেন:
# views.py (অন্য কোনো ভিউ যেখানে প্রেফারেন্স ব্যবহার করবেন)
from dynamic_preferences.users.registries import user_preferences_registry
def dashboard(request):
user_preferences = user_preferences_registry.manager(request.user)
theme_color = user_preferences['theme__theme_color']
language = user_preferences['theme__language']
return render(request, 'dashboard.html', {
'theme_color': theme_color,
'language': language,
})