Django

⌘K
  1. Home
  2. Django
  3. Django তে কিভাবে কাজ করতে...
  4. Form ফর্ম
  5. 08. ফর্ম ভ্যালিডেশন

08. ফর্ম ভ্যালিডেশন

Django বিল্ট-ইন যাচাইকরণ নিয়ম

Django ফর্মগুলি ব্যবহার করে, ব্যবহারকারীদের কাছ থেকে তথ্য সংগ্রহ করা এবং সেই তথ্যটি যাচাই করা সহজ। Django ফর্মগুলিতে বিল্ট-ইন যাচাইকরণ রয়েছে যা আপনাকে সাধারণ যাচাইকরণ নিয়মগুলি প্রয়োগ করতে দেয়, যেমন ফাঁকা ক্ষেত্রগুলির জন্য যাচাই করা।

বিল্ট-ইন যাচাইকরণ নিয়ম

Django ফর্মগুলিতে বেশ কয়েকটি বিল্ট-ইন যাচাইকরণ নিয়ম রয়েছে। এই নিয়মগুলির মধ্যে রয়েছে:

  • max_length – ক্ষেত্রটির মান সর্বোচ্চ কত অক্ষর দীর্ঘ হতে পারে তা নির্দিষ্ট করে।
  • min_length – ক্ষেত্রটির মান সর্বনিম্ন কত অক্ষর দীর্ঘ হতে পারে তা নির্দিষ্ট করে।
  • required – ক্ষেত্রটি পূরণ করা বাধ্যতামূলক কিনা তা নির্দিষ্ট করে।
  • unique – ক্ষেত্রটির মান ডেটাবেসে অবশ্যই অনন্য হতে হবে।

নিজস্ব যাচাইকরণ নিয়ম

  • clean_<field_name>(): এটি একটি নির্দিষ্ট ফিল্ডের ডেটা ভ্যালিডেট করতে ব্যবহৃত হয়, এটি মূলত একটি ইনডিভিজুয়াল ফিল্ড এর জন্য কাস্টম ভ্যালিডেশন প্রদান করতে ব্যবহৃত হয়।
  • clean(): এটি ফর্মের সার্ভার সাইড ভ্যালিডেশনের জন্য ব্যবহৃত হয়, এটি ফর্মের সকল ফিল্ডের ডেটা এবং একটি সাধারিত স্টেটিক ভ্যালিডেশন প্রদান করতে ব্যবহৃত হয়।
  • cleaned_data: এটি ফর্ম থেকে ভ্যালিডেট করা ডেটা প্রকাশ করে, যেটি ফর্মের সকল মেথড দ্বারা ভ্যালিডেট করা হয়েছে। যেমন যদি forms.IntegerField() ব্যবহার করি এটা forms ক্লাসের IntegerField() এর ভ্যালিডেশন প্রথমে ব্যবহার করে ভ্যালিডেট হলে ভ্যালিডেট ডেটা দেবে। পরে কাস্টম ভ্যালিডেশন এ যাবে।
  • is_valid(): এটা views.py বা আমরা যেখানে লজিক লিখবো সেখানে ফর্ম ভ্যালিড চেক করার জন্য ব্যবহার করা হয়।

clean_<field_name>() | Validating Single fields

class MyForm(forms.Form):
    age = forms.IntegerField()

    def clean_age(self):
        age = self.cleaned_data['age']
        if age < 18 or age > 120:
            raise forms.ValidationError("Age must be between 18 and 120.")

clean() | Validating multiple fields

class MyForm(forms.Form):
    password = forms.CharField(max_length=100)
    password_confirm = forms.CharField(max_length=100)

    def clean(self):
        cleaned_data = super().clean()
        password = cleaned_data.get('password')
        password_confirm = cleaned_data.get('password_confirm')

        if password != password_confirm:
            raise forms.ValidationError({"password_confirm": "Passwords must match."})

        return cleaned_data

মডেল ফর্ম ভ্যালিডেশন

আমরা একই নিয়মে মডেল ফর্ম ভ্যালিডেশন করতে পারি

Single Field validation

from django import forms
from .models import MyModel

class MyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = ['name']

    def clean_name(self):
        name = self.cleaned_data['name']
        if len(name) < 5:
            raise forms.ValidationError("Name must be at least 5 characters long.")
        return name

multiple Field validation

from django import forms
from .models import MyModel

class MyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = ['name', 'age']

    def clean(self):
        cleaned_data = super().clean()
        password = cleaned_data.get('password')
        password_confirm = cleaned_data.get('password_confirm')

        if password != password_confirm:
            raise forms.ValidationError({"password_confirm": "Passwords must match."})

        return cleaned_data

is_valid() :

form = MyForm(request.POST)

if form.is_valid():
    # Process the form data
else:
    # Handle the form errors

if not form.is_valid():
    for field, errors in form.errors.items():
        for error in errors:
            print(f"{field}: {error}")

is_multipart


if request.method == 'POST':
    # Create an instance of the form with the posted data
    my_form = MyForm(request.POST, request.FILES)

# Check if the form is multipart
if my_form.is_multipart():
    print("The form is multipart.")
else:
    print("The form is not multipart.")

from django import forms

class MyForm(forms.Form):
    text_field = forms.CharField()
    file_field = forms.FileField()

# In a view or somewhere else
if request.method == 'POST':
    # Create an instance of the form with the posted data
    my_form = MyForm(request.POST, request.FILES)

    # Check if the form is valid and multipart
    if my_form.is_valid() and my_form.is_multipart():
        # Form is valid, process the data
        text_data = my_form.cleaned_data['text_field']
        file_data = my_form.cleaned_data['file_field']

        # Additional processing logic

        print("Form is valid and multipart.")
    else:
        # Form is not valid or not multipart, handle errors
        print("Form is not valid or not multipart.")
else:
    # Create an empty form for GET requests
    my_form = MyForm()

# Check if the form is multipart
if my_form.is_multipart():
    print("The form is multipart.")
else:
    print("The form is not multipart.")

has_changed()


my_form = MyForm()

# Check if the form data has changed
if my_form.has_changed():
    print("Form data has changed.")
else:
    print("Form data has not changed.")

How can we help?