Django এর Forms সিস্টেম ব্যবহার করে ওয়েব অ্যাপ্লিকেশনে ইউজার ইন্টারফেসের মাধ্যমে ডেটা গ্রহণ এবং প্রক্রিয়াকরণ সহজভাবে করা যায়। Django ফর্ম ক্লাস (Form Class) ব্যবহার করে আপনি HTML ফর্ম তৈরি করতে পারেন এবং ডেটা ভ্যালিডেশন, প্রক্রিয়াকরণ ও সেভ করার কাজগুলো করতে পারেন। এটি Django এর ModelForms এর সঙ্গে ইন্টিগ্রেট হতে পারে, যা ডেটাবেসের মডেলগুলির সাথে কাজ করে।
এখানে আমরা Django এর Form Class ব্যবহার করে একটি সাধারণ ফর্ম তৈরি করার প্রক্রিয়া আলোচনা করব।
Django ফর্ম তৈরি করার ধাপ
১. Forms.py ফাইল তৈরি করা
প্রথমে আপনার অ্যাপের forms.py ফাইলটি তৈরি করতে হবে। যদি এটি আগে থেকে না থাকে, তাহলে এই ফাইলটি তৈরি করুন।
২. ফর্ম ক্লাস তৈরি করা
এখন, forms.py ফাইলে আপনি ফর্ম ক্লাস তৈরি করবেন। উদাহরণস্বরূপ, একটি কন্ট্যাক্ট ফর্ম তৈরি করা যেতে পারে, যেখানে ব্যবহারকারী তার নাম, ইমেইল এবং মেসেজ ইনপুট করতে পারবে।
from django import forms
class ContactForm(forms.Form):
name = forms.CharField(max_length=100, label='Your Name') # নাম ফিল্ড
email = forms.EmailField(label='Your Email') # ইমেইল ফিল্ড
message = forms.CharField(widget=forms.Textarea, label='Your Message') # মেসেজ ফিল্ড
এখানে:
CharField: সাধারণ টেক্সট ইনপুট ফিল্ড, যেমন নামের জন্য।EmailField: ইমেইল অ্যাড্রেস ইনপুট ফিল্ড, যা ইমেইল ঠিকানা যাচাই করে।Textarea: বড় টেক্সটের জন্য, যেমন একটি মেসেজ ইনপুট ফিল্ড।
label এর মাধ্যমে ফর্ম ফিল্ডের লেবেল সেট করা হয়, যা ব্যবহারকারীর জন্য নির্দেশনা হিসেবে কাজ করে।
৩. ফর্ম ভ্যালিডেশন এবং প্রক্রিয়াকরণ
এখন, Django ভিউ ফাংশনে ফর্মটি প্রক্রিয়া ও ভ্যালিডেশন করা হবে। যখন ইউজার ফর্ম সাবমিট করবে, তখন Django ফর্মের ডাটা ভ্যালিড করবে এবং সেই অনুযায়ী প্রক্রিয়া করবে।
views.py ফাইলে ফর্ম হ্যান্ডলিং:
from django.shortcuts import render
from .forms import ContactForm
def contact_view(request):
if request.method == 'POST':
form = ContactForm(request.POST) # ফর্মটি POST ডেটা দিয়ে তৈরি হচ্ছে
if form.is_valid(): # ফর্মের ডেটা ভ্যালিড কিনা পরীক্ষা
# ডেটা প্রক্রিয়াকরণ বা সেভ করা
name = form.cleaned_data['name']
email = form.cleaned_data['email']
message = form.cleaned_data['message']
# এখানে আপনি মেসেজটি ডাটাবেসে সেভ করতে পারেন অথবা ইমেইল পাঠাতে পারেন
# উদাহরণস্বরূপ:
# send_email(name, email, message)
return render(request, 'success.html') # সফলভাবে সাবমিট হলে একটি সফল পেজ দেখান
else:
form = ContactForm() # ফর্মটি GET রিকোয়েস্টের জন্য খালি থাকে
return render(request, 'contact.html', {'form': form})
request.method == 'POST': চেক করা হচ্ছে যে, ফর্মটি সাবমিট করা হয়েছে কিনা।form.is_valid(): এই মেথডটি চেক করে যে, ফর্মের ইনপুট ভ্যালিড কিনা (যেমন ইমেইল ফরম্যাট সঠিক কিনা, ফিল্ডগুলি পূর্ণ হয়েছে কিনা)।form.cleaned_data: এটি ফর্ম থেকে সঠিকভাবে ফিল্টার করা এবং স্যানিটাইজ করা ডেটা দেয়।
৪. ফর্ম HTML টেমপ্লেট তৈরি করা
এখন, আপনাকে ফর্মটি একটি HTML টেমপ্লেটে রেন্ডার করতে হবে। উদাহরণস্বরূপ, একটি contact.html টেমপ্লেট তৈরি করা যাক:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Contact Form</title>
</head>
<body>
<h2>Contact Us</h2>
<form method="POST">
{% csrf_token %}
{{ form.as_p }} <!-- ফর্মের সব ফিল্ড গুলি প্যারাগ্রাফের মধ্যে দেখাবে -->
<button type="submit">Submit</button>
</form>
</body>
</html>
এখানে:
{% csrf_token %}: এটি CSRF (Cross-Site Request Forgery) প্রতিরোধের জন্য Django এর নিরাপত্তা টোকেন।{{ form.as_p }}: এই টেমপ্লেট ট্যাগ Django ফর্মের ইনপুট ফিল্ডগুলোকে HTML প্যারাগ্রাফ (<p>) হিসেবে রেন্ডার করবে। আপনি এটি{{ form.as_table }}বা{{ form.as_ul }}দিয়েও রেন্ডার করতে পারেন।
৫. URL কনফিগারেশন
অবশেষে, আপনার urls.py ফাইলে এই ভিউটির URL কনফিগার করতে হবে।
from django.urls import path
from . import views
urlpatterns = [
path('contact/', views.contact_view, name='contact'), # contact_view ভিউকে /contact URL এর সাথে যুক্ত করা
]
ফর্মের ফিচারসমূহ
- ভ্যালিডেশন: Django ফর্ম ক্লাস স্বয়ংক্রিয়ভাবে ইনপুট ভ্যালিডেশন হ্যান্ডেল করে। আপনি চাইলে কাস্টম ভ্যালিডেশনও যোগ করতে পারেন।
- ক্লিনড ডেটা:
form.cleaned_dataএর মাধ্যমে আপনি ফর্মের নিরাপদ ডেটা বের করতে পারেন। - স্টাইলিং: Django ফর্ম কাস্টম HTML কোডের মাধ্যমে স্টাইল করা যেতে পারে, অথবা আপনি Django ফর্ম উইজেট ব্যবহার করে ফর্মের আউটপুট কাস্টমাইজ করতে পারেন।
Django ফর্ম ক্লাস ব্যবহারের মাধ্যমে আপনি খুব সহজে ডেটা ভ্যালিডেশন, প্রক্রিয়াকরণ এবং সেভিং এর কাজ করতে পারবেন। এটি ওয়েব ফর্ম তৈরির প্রক্রিয়াকে আরও কার্যকর এবং নিরাপদ করে তোলে।
Read more