Rumah > pembangunan bahagian belakang > Tutorial Python > Teknik untuk pengesahan medan di Django

Teknik untuk pengesahan medan di Django

Mary-Kate Olsen
Lepaskan: 2025-01-27 00:15:09
asal
622 orang telah melayarinya

Techniques for Field Validation in Django

Pengesahan data borang Django ialah pautan utama dalam pembangunan web, memastikan data pengguna yang dikumpul memenuhi keperluan aplikasi. Django menyediakan pelbagai kaedah pengesahan medan, yang artikel ini akan menerangkan langkah demi langkah.

  1. Gunakan parameter medan

Apabila mentakrifkan medan borang Django, anda biasanya boleh menentukan peraturan pengesahan secara langsung melalui parameter medan.

Sebagai contoh, pastikan medan first_name mempunyai panjang maksimum 100 aksara. Oleh kerana ia adalah CharField, anda boleh menggunakan parameter max_length:

<code class="language-python">from django import forms

class PersonalInfo(forms.Form):
    first_name = forms.CharField(max_length=100)</code>
Salin selepas log masuk

Ini adalah salah satu kaedah pengesahan yang paling mudah dan paling biasa digunakan.

  1. Gunakan pengesah terbina dalam

Pengesah terbina dalam Django ialah objek boleh panggil boleh guna semula yang melakukan semakan pengesahan khusus.

Andaikan anda ingin memastikan bahawa nilai minimum medan age ialah 18. Walaupun adalah mungkin untuk menggunakan parameter min_value secara langsung, berikut ialah demonstrasi cara menggunakan MinValueValidator Django:

<code class="language-python">from django import forms
from django.core.validators import MinValueValidator

class PersonalInfo(forms.Form):
    first_name = forms.CharField(max_length=100)
    age = forms.IntegerField(validators=[MinValueValidator(18)])</code>
Salin selepas log masuk

Modul validators Django menyediakan berbilang pengesah pra-bina untuk tugas seperti semakan nilai min/maks, pengesahan ungkapan biasa dan banyak lagi.

  1. Menulis pengesah tersuai

Kadangkala, logik pengesahan yang lebih kompleks diperlukan yang tidak dapat dikendalikan oleh pengesah terbina dalam. Dalam kes ini, adalah mungkin untuk menulis pengesah tersuai.

Pengesah ialah objek boleh panggil yang menerima nilai dan menaikkan ValidationError jika nilai tidak memenuhi kriteria. Contohnya, cipta pengesah untuk memastikan nombor adalah genap:

<code class="language-python">from django import forms
from django.core.exceptions import ValidationError
from django.core.validators import MinValueValidator

def validate_even(value):
    if value % 2 != 0:
        raise ValidationError(f"{value} 不是偶数")

class PersonalInfo(forms.Form):
    first_name = forms.CharField(max_length=100)
    age = forms.IntegerField(validators=[MinValueValidator(18)])
    even_field = forms.IntegerField(validators=[validate_even])</code>
Salin selepas log masuk

Petua: Untuk memastikan kod anda teratur, pertimbangkan untuk meletakkan pengesah tersuai anda dalam fail berasingan, seperti validators.py. Ia bergantung kepada saiz projek.

  1. Gunakan kaedah clean_<fieldname>()

Satu lagi kaedah pengesahan medan yang berkuasa adalah untuk mengatasi kaedah clean_<fieldname>() dalam kelas borang. Kaedah ini amat berguna untuk logik pengesahan yang khusus untuk satu bentuk.

Sebagai contoh, untuk mengesahkan medan even_field terus dalam borang:

<code class="language-python">from django import forms
from django.core.exceptions import ValidationError
from django.core.validators import MinValueValidator

class PersonalInfo(forms.Form):
    first_name = forms.CharField(max_length=100)
    age = forms.IntegerField(validators=[MinValueValidator(18)])
    even_field = forms.IntegerField()

    def clean_even_field(self):
        even_field_validated = self.cleaned_data.get("even_field")
        if even_field_validated % 2 != 0:
            raise ValidationError(f"{even_field_validated} 不是偶数")
        return even_field_validated</code>
Salin selepas log masuk

Kaedah ini menyediakan akses terus kepada data bersih medan dan membenarkan kawalan yang lebih halus ke atas pengesahan.

  1. clean()Kaedah

Kadangkala pengesahan perlu mengambil kira perhubungan antara berbilang medan dalam borang. Sebagai contoh, katakan anda mempunyai dua medan dan anda perlu memastikan bahawa satu medan mempunyai lebih banyak aksara daripada yang lain. Pengesahan jenis ini ialah pengesahan peringkat borang kerana ia bergantung pada nilai berbilang medan, bukan hanya satu medan.

Untuk melakukan ini, anda boleh mengatasi kaedah clean() dalam kelas borang.

<code class="language-python">from django import forms
from django.core.exceptions import ValidationError
from django.core.validators import MinValueValidator

class PersonalInfo(forms.Form):
    first_name = forms.CharField(max_length=100)
    age = forms.IntegerField(validators=[MinValueValidator(18)])
    even_field = forms.IntegerField()
    field1 = forms.CharField()
    field2 = forms.CharField()

    def clean_even_field(self):
        even_field_validated = self.cleaned_data.get("even_field")
        if even_field_validated % 2 != 0:
            raise ValidationError(f"{even_field_validated} 不是偶数")
        return even_field_validated

    def clean(self):  # 表单级验证
        cleaned_data = super().clean()
        field1_value = cleaned_data.get("field1")
        field2_value = cleaned_data.get("field2")

        if field1_value and field2_value and len(field1_value) >= len(field2_value):
            raise ValidationError("field2 字符数必须多于 field1.")
        return cleaned_data</code>
Salin selepas log masuk

Dengan mengatasi kaedah clean(), anda boleh melaksanakan logik pengesahan tersuai yang digunakan pada keseluruhan borang untuk memastikan data memenuhi keperluan yang lebih kompleks.

Ringkasan

Django menyediakan pelbagai kaedah pengesahan borang:

  • Parameter medan: Gunakan max_length atau min_value dan parameter lain untuk pengesahan mudah.
  • Peranti Pengesahan Built -in: Gunakan peranti pengesahan Django yang telah ditetapkan untuk mengendalikan mod biasa.
  • Peranti pengesahan tersuai: Objek boleh diguna semula yang boleh ditulis untuk peraturan pengesahan yang kompleks.
  • <:> Kaedah: Tulis semula kaedah ini untuk pengesahan medan tertentu yang tinggi. clean_<fieldname>()
  • <:> Kaedah: Gunakan kaedah ini untuk melaksanakan pengesahan Borang -tahap yang melibatkan pelbagai bidang.
  • clean()

Atas ialah kandungan terperinci Teknik untuk pengesahan medan di Django. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan