Pengesahan Medan dan Pengesah Pydantic
Terokai pilihan pengesahan medan lanjutan dan cipta pengesah tersuai untuk peraturan perniagaan yang kompleks.
Pengesahan Medan dan Pengesah Pydantic ialah pelajaran Kem Intensif Pembangunan Bahagian Belakang FastAPI percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Kem Intensif Pembangunan Bahagian Belakang FastAPI, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Kem Intensif Pembangunan Bahagian Belakang FastAPI merangkumi sejumlah 4 pelajaran.
Mengapa Melakukan Pengesahan dengan Pydantic?
Pydantic mengesahkan jenis data dalam model anda secara automatik. Namun, kadangkala anda memerlukan peraturan yang lebih khusus, seperti panjang minimum untuk nama pengguna atau umur positif.
Di sinilah pengesahan medan dan pengesah tersuai digunakan! Kedua-duanya memastikan data anda mematuhi semua peraturan perniagaan aplikasi, sekali gus menjadikan API anda lebih boleh dipercayai.
Menggunakan Fungsi `Field` Pydantic
Fungsi Field Pydantic membolehkan anda menambahkan peraturan pengesahan tambahan dan metadata pada medan model. Fungsi ini diimport daripada pydantic. Mari lihat cara menetapkan panjang minimum dan maksimum untuk rentetan.
from pydantic import BaseModel, Field
class User(BaseModel):
username: str = Field(min_length=3, max_length=15)
age: int
# Valid
try:
user1 = User(username="coddy", age=25)
print(f"Valid username: {user1.username}")
except Exception as e:
print(e)
# Invalid username (too short)
try:
user2 = User(username="c", age=30)
except Exception as e:
print(f"Error: {e}")Peraturan Medan Berangka
Untuk nombor, Field menawarkan pengesah perbandingan yang berkuasa:
gt(lebih besar daripada)lt(lebih kecil daripada)ge(lebih besar daripada atau sama dengan)le(lebih kecil daripada atau sama dengan)
Gunakannya untuk menentukan julat yang sah bagi data berangka supaya nilai sentiasa berada dalam lingkungan yang dijangka.
from pydantic import BaseModel, Field
class Product(BaseModel):
name: str
price: float = Field(gt=0, le=1000) # Price > 0 and <= 1000
stock: int = Field(ge=0) # Stock >= 0
# Valid
try:
product1 = Product(name="Book", price=19.99, stock=100)
print(f"{product1.name} price: {product1.price}")
except Exception as e:
print(e)
# Invalid price (negative)
try:
product2 = Product(name="Pen", price=-5.0, stock=50)
except Exception as e:
print(f"Error: {e}")Ungkapan Nalar untuk Pengesahan Medan
Argumen pattern dalam Field membolehkan anda mengesahkan medan rentetan berdasarkan ungkapan nalar. Ini amat berguna untuk menetapkan format khusus seperti kod produk, nombor siri atau pengecam kompleks.
from pydantic import BaseModel, Field
class ItemCode(BaseModel):
# Code must be three uppercase letters, a hyphen, then four digits
code: str = Field(pattern=r"^[A-Z]{3}-\d{4}$") # e.g., ABC-1234
# Valid
try:
item1 = ItemCode(code="XYZ-9876")
print(f"Valid code: {item1.code}")
except Exception as e:
print(f"Error: {e}")
# Invalid format (lowercase letters)
try:
item2 = ItemCode(code="abc-1234")
except Exception as e:
print(f"Error: {e}")Membina Pengesah Tersuai
Walaupun Field merangkumi banyak kes lazim, kadangkala anda memerlukan logik pengesahan yang lebih kompleks dan melibatkan kod Python tersuai. Di sinilah penghias @validator Pydantic menunjukkan kelebihannya.
Anda boleh mentakrifkan kaedah dalam BaseModel dan menghiasnya dengan @validator('field_name') untuk menggunakan logik tersuai pada medan tersebut.
Logik Tersuai untuk Medan
Mari cipta pengesah tersuai untuk memastikan medan password memenuhi keperluan kerumitan tertentu, seperti mengandungi sekurang-kurangnya satu digit. Fungsi pengesah menerima nilai medan sebagai argumen.
from pydantic import BaseModel, validator
import re
class UserAuth(BaseModel):
username: str
password: str
@validator('password')
def password_has_digit(cls, v):
if not re.search(r"\d", v):
raise ValueError('password must contain at least one digit')
return v
# Valid
try:
user1 = UserAuth(username="coder", password="MySecureP@ss1")
print(f"Password OK for {user1.username}")
except Exception as e:
print(f"Error: {e}")
# Invalid password (no digits)
try:
user2 = UserAuth(username="test", password="NoDigitsHere!")
except Exception as e:
print(f"Error: {e}")Transformasi Data dengan `pre=True`
Kadangkala, anda perlu mengubah atau membersihkan data yang diterima sebelum pengesahan jenis standard Pydantic atau pengesah lain dijalankan. Untuk tujuan ini, gunakan @validator('field_name', pre=True).
Kes penggunaan lazim ialah membuang ruang kosong atau menukar huruf besar-kecil sebelum kandungan disahkan, bagi memastikan keseragaman.
from pydantic import BaseModel, validator
class SearchQuery(BaseModel):
query: str
@validator('query', pre=True)
def strip_whitespace(cls, v):
if isinstance(v, str):
return v.strip()
return v # Pydantic will handle type validation later
# Input with leading/trailing spaces
query1 = SearchQuery(query=" python tutorial ")
print(f"Cleaned query: '{query1.query}'")
# Input without spaces
query2 = SearchQuery(query="fastapi")
print(f"Cleaned query: '{query2.query}'")Menggabungkan Pengesah Medan
Anda boleh menggunakan berbilang penghias @validator pada satu medan. Penghias tersebut akan dilaksanakan mengikut susunan yang ditakrifkan. Ini membolehkan anda merangkaikan logik pengesahan supaya model anda lebih kukuh.
Untuk medan senarai, gunakan each_item=True bagi menggunakan pengesah pada setiap elemen dalam senarai.
from pydantic import BaseModel, validator
class TagList(BaseModel):
tags: list[str]
@validator('tags', each_item=True)
def tag_must_be_lowercase(cls, v):
if v != v.lower():
raise ValueError('tag must be lowercase')
return v
@validator('tags', each_item=True)
def tag_min_length(cls, v):
if len(v) < 2:
raise ValueError('tag must be at least 2 chars')
return v
# Valid
try:
tags1 = TagList(tags=["python", "fastapi"])
print(f"Tags OK: {tags1.tags}")
except Exception as e:
print(f"Error: {e}")
# Invalid (uppercase and too short)
try:
tags2 = TagList(tags=["PY", "a"])
except Exception as e:
print(f"Error: {e}")Pengesahan Rentas Medan dengan Pengesah Akar
Kadangkala, kesahan satu medan bergantung pada nilai medan lain (atau beberapa medan lain). Ini dipanggil pengesahan rentas medan. @root_validator Pydantic membolehkan anda mengesahkan kamus data keseluruhan model sekali gus.
Ia berguna untuk senario seperti memastikan start_date berlaku sebelum end_date, atau memastikan password dan confirm_password sepadan.
Pengesah Akar dalam Tindakan
@root_validator menerima keseluruhan data model sebagai kamus. Anda boleh menggunakan pre=True atau pre=False (lalai) untuk menjalankannya sebelum atau selepas pengesahan khusus medan. Pengesahan selepas pemprosesan (lalai) biasanya lebih sesuai untuk pemeriksaan rentas medan.
from pydantic import BaseModel, root_validator, ValidationError
class Registration(BaseModel):
email: str
password: str
password_confirm: str
@root_validator()
def passwords_match(cls, values):
pw1, pw2 = values.get('password'), values.get('password_confirm')
if pw1 is not None and pw2 is not None and pw1 != pw2:
raise ValueError('passwords do not match')
return values
# Valid
try:
reg1 = Registration(email="a@b.com", password="P@ssword1", password_confirm="P@ssword1")
print("Registration valid!")
except ValidationError as e:
print(f"Error: {e}")
# Invalid (passwords don't match)
try:
reg2 = Registration(email="x@y.com", password="P@ssword1", password_confirm="P@ssword2")
except ValidationError as e:
print(f"Error: {e}")Titik Semakan Pengesahan
Pertimbangkan model Pydantic berikut untuk profil pengguna:
from pydantic import BaseModel, Field, validator
import re
class UserProfile(BaseModel):
username: str = Field(min_length=5, max_length=20)
email: str
age: int = Field(gt=18)
bio: str = ""
@validator('email')
def validate_email_format(cls, v):
if not re.match(r"[^@]+@[^@]+\.[^@]+", v):
raise ValueError('Invalid email format')
return vAntara input JSON berikut, yang manakah sah untuk UserProfile?
Ulang Kaji: Menguasai Pengesahan
Anda telah mempelajari cara menjadikan model data anda benar-benar kukuh!
Field: Untuk peraturan terbina dalam seperti panjang minimum/maksimum, julat berangka dan corak ungkapan nalar.@validator: Untuk melaksanakan logik tersuai bagi medan individu, denganpre=Trueuntuk transformasi awal.@root_validator: Untuk pengesahan rentas medan yang kompleks dan bergantung pada beberapa medan.
Alat ini membolehkan anda mentakrifkan peraturan yang tepat bagi memastikan integriti data dalam aplikasi FastAPI anda. Teruskan berlatih untuk membina API yang lebih boleh dipercayai!
Pelajari Kem Intensif Pembangunan Bahagian Belakang FastAPI dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 21
- Pelajaran
- 84
Soalan Lazim
Adakah pelajaran “Pengesahan Medan dan Pengesah Pydantic” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Kem Intensif Pembangunan Bahagian Belakang FastAPI, termasuk “Pengesahan Medan dan Pengesah Pydantic”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Kem Intensif Pembangunan Bahagian Belakang FastAPI merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Pengesahan Medan dan Pengesah Pydantic”?
Terokai pilihan pengesahan medan lanjutan dan cipta pengesah tersuai untuk peraturan perniagaan yang kompleks. Anda berlatih Kem Intensif Pembangunan Bahagian Belakang FastAPI menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Kem Intensif Pembangunan Bahagian Belakang FastAPI?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Kem Intensif Pembangunan Bahagian Belakang FastAPI di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Pengesahan Medan dan Pengesah Pydantic” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Kem Intensif Pembangunan Bahagian Belakang FastAPI ini?
Ya. Setiap pelajaran Kem Intensif Pembangunan Bahagian Belakang FastAPI menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Pengesahan Medan dan Pengesah Pydantic
- Jenis Data Tersuai dan Tetapan
- Model Bersarang dan Struktur Rekursif
- Penyirian dengan model_dump dan Alias