মডিউল ৫-৯ঃ জ্যাংগো ফর্ম ডেটার ভ্যালিডেশন

এই মডিউলে আমরা শিখব কিভাবে জ্যাঙ্গগো ফর্মের মাধ্যমে ডেটা নেয়ার সময় ডেটার ভ্যলিডেশন করা যায়।

forms.py ফাইলে নতুন একটি ফর্ম ক্লাস লিখে ফেলি, নাম দেই StudentData

Code:: 5.9.1 first_app/forms.py

from django import forms

class contactForm(forms.Form):
    name = forms.CharField(label="Full Name : ", help_text="Total length must be within 70 characters", required=False, error_messages={'required': 'Please enter your name.'},widget = forms.Textarea(attrs = {'id' : 'text_area', 'class' : 'class1 class 2', 'placeholder' : 'Enter your name'},))
    email = forms.EmailField(label = "User Email")
    age = forms.CharField(widget=forms.NumberInput)
    check = forms.BooleanField()
    birthday = forms.CharField(widget=forms.DateInput(attrs= {'type' : 'date'}))
    appointment = forms.CharField(widget=forms.DateInput(attrs= {'type' : 'datetime-local'}))
    CHOICES = [('S', 'Small'), ('M', 'Medium'), ('L', 'Large')]
    size = forms.ChoiceField(choices=CHOICES, widget = forms.RadioSelect)
    MEAL = [('P', 'Pepperoni'), ('M', 'Mashroom'), ('B', 'Beef')]
    pizza = forms.MultipleChoiceField(choices=MEAL, widget=forms.CheckboxSelectMultiple)
    
# New Code 
class StudentData(forms.Form):
    name =forms.CharField(widget=forms.TextInput)
    email =forms.CharField(widget=forms.EmailInput)

    def clean(self):
        cleaned_data = super().clean()
        valname = self.cleaned_data['name']
        valemail = self.cleaned_data['email']
        if len(valname) < 10:
            raise forms.ValidationError("Enter a name with at least 10 characters")    
        if '.com' not in valemail:
            raise forms.ValidationError("Your email must contain .com")
  • ১৭ ও ১৮ নাম্বার লাইনে name ও email নামে ২ টি CharField নেয়া হয়েছে , widget ব্যবহার করে ফিল্ড দুইটিকে যথাক্রমে TextInput ও EmailInput ফিল্ডে রুপান্তর করা হয়েছে।

  • ২০ নম্বর লাইনে জ্যাংগোর বিল্ট-ইন clean( ) ফাংশন ডিফাইন করেছি

  • ২১ নম্বর লাইনে সুপার ক্লাস অর্থাৎ Form ক্লাসের ফাংশন clean( ) কে কল করে ফর্মটির clean ডেটা cleaned_data নামক ভ্যরিয়েবলে রেখেছি।এখানে খেয়াল করা জরুরি যে cleaned_data ভ্যারিয়েবলে ফর্মটির সব ফিল্ডের ক্লিনড ডেটা আছে।

  • ২২-২৩ নাম্বার লাইনে নির্দিষ্ট ফিল্ডের ডেটা আলাদা আলাদা ভ্যারিয়েবলে রেখেছি

  • এরপর ভ্যারিয়েবলে প্রাপ্ত ফিল্ডের ডেটা আমাদের ক্রাইটেরিয়ার সাথে তুলনা করে ভ্যালিডেশন ইরোরর রেইজ করেছি

StudentData ফর্ম-ক্লাসটির জন্য first_app/views.py ফাইলে একটি ফাংশন লিখে ফেলি

Code:: 5.9.2 first_app/views.py

from django.shortcuts import render
from . forms import contactForm, StudentData

...
...
...
     
# New Code , for StuentData Form-Class
def StudentForm(request):
    if request.method == 'POST':
        form = StudentData(request.POST, request.FILES)
        if form.is_valid():
            print(form.cleaned_data)
    else:
        form = StudentData()
    return render(request, './first_app/django_form.html', {'form':form})

StudentForm ফাংশনটির কোড পূর্বের DjangoForm ফাংশনের মতোই, তাই আমি আর কোডের এই ব্লকটি ব্যাখ্যা করছি না। তবে first_app/views.py ফাইলের শুরুতেই কিন্ত contactForm এর সাথে StudentData ইমপোর্ট করে নিতে হবে।

এখন, প্রজেক্ট রান করার আগে first_app/urls.py ফাইলে URL-প্যাটার্ন নিচের মত করে এডিট করে ফেলি

আশা করি আপনারা এখন প্রজেক্টটি রান করে আমাদের সেট করে দেয়া ক্রাইটেরিয়ার সাপেক্ষে ভ্যালিড ও ইনভ্যালিড উভয় প্রকার ডেটা ইনপুট দিয়ে ফর্মের ভ্যালিডেশনের কার্যকারিতা যাচাই করে দেখবেন।

Last updated