permintaan
Anda dapat menggunakan model Ormar sebagai pengganti model Pydantic dalam parameter tubuh permintaan FastAPI.
Anda juga dapat mencampur ormar. Model dengan pydantic jika perlu.
Salah satu tugas paling umum dalam sebuah permintaan adalah mengecualikan bidang tertentu yang tidak ingin Anda sertakan dalam muatan yang di kirim ke API.
Ini dapat dicapai dengan berbagai cara di Ormar, sehingga Anda dapat meninjau opsi Anda di bawah ini dan memilih salah satu yang paling sesuai dengan situasi Anda.
Kecualikan bidang dari permintaan
bidang opsional
Harap dicatat bahwa setiap bidang opsional tidak diperlukan, yang berarti bidang opsional dapat dilewati baik dalam tanggapan maupun permintaan.
Bidang tidak diperlukan jika (ada / banyak / semua) hal berikut terjadi:
- Bidang ditandai sebagai nullable = Benar
- Bidang memiliki nilai default atau fungsionalitas yang disediakan, yaitu default = "Uji"
- Bidang mengatur server\ _ nilai default
- Field adalah bidang autoincrement=Trueprimary\ _ key (note ormar. Integerprimary\ _ key default adalah autoincrement)
Contoh:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
Pada contoh di atas, id bidang (yang merupakan bilangan bulat peningkatan otomatis), nama depan (yang memiliki nullable = Benar), dan kategori (yang memiliki nilai default) adalah opsional, dapat dilewati dalam respons, dan model akan tetap divalidasi.
Jika bidang tersebut dapat dibatalkan, tidak harus dimasukkan dalam muatan selama pembuatan dan sebagai tanggapan, jadi menurut contoh di atas, Anda dapat:
!!! Peringatan Perhatikan bahwa meskipun Anda tidak harus melewati bidang opsional, Anda masih dapat melakukannya. Jika seseorang melewati nilai, itu akan digunakan nanti, kecuali jika Anda mengambil langkah-langkah untuk mencegahnya.
1 2 3 4 | |
Ini berarti bahwa jika Anda tidak lulus ie first\ _ name dalam permintaan, itu akan divalidasi dengan benar (karena bidang ini opsional) dan Tidak ada yang akan disimpan dalam database.
Menghasilkan model pydantic dari ormar. Model
Karena tugas mengecualikan bidang sangat umum, Ormar memiliki cara khusus untuk menghasilkan model Pydantic dari Ormar yang ada. Model tanpa harus masuk kembali ke semua bidang.
Metode ini adalah metode get\ _ pydantic () yang tersedia untuk semua kelas model.
1 2 3 4 5 6 | |
!!! Catatan Untuk melihat lebih banyak contoh dan baca lebih lanjut, kunjungi bagian\ _ pydantic dokumentasi.
PERINGATAN Metode get\ _ pydantic menghasilkan semua model di pohon model bersarang berdasarkan algoritma yang memungkinkan menghindari loop dalam model (algoritma yang sama yang digunakan dalam model\ _ dump (), pilih\ _ semua (), dll.)
1 2 3 | |
Dengan begitu Anda dapat mengecualikan / memasukkan ladang yang berbeda pada daun pohon yang berbeda.
MyPy dan ketik memeriksa
Harap dicatat bahwa menetapkan fungsi sebagai tipe Python lulus pada runtime (karena tidak dicentang), dan catur tipe statis seperti MyPy mengeluh.
Meskipun hasil dari panggilan fungsi selalu sama untuk model tertentu, jenis yang dibuat secara dinamis tidak diperbolehkan.
Jadi Anda memiliki dua opsi:
Yang pertama adalah hanya menambahkan # ketik: abaikan untuk melewatkan pengecekan
1 2 3 4 5 | |
Yang kedua sedikit lebih hacky, menggunakan FastAPI untuk mengekstrak parameter fungsi.
Anda dapat mengesampingkan\ __anotasi_\ _ entri untuk parameter tertentu.
1 2 3 4 5 6 7 8 | |
Perhatikan bahwa ini akan menyebabkan mypy "berpikir" bahwa pengguna adalah model ormar, tetapi karena itu tidak masalah dalam permintaan (Anda tetap akan memberikan dekrit jsonized dan perlu mengonversi sebelum menyimpan).
Ini harus tetap bekerja dengan baik karena model yang dihasilkan akan menjadi bagian dari bidang, sehingga semua bidang yang diperlukan akan divalidasi, dan semua bidang yang tidak digunakan akan gagal pada saat runtime.
Model kantilever independen
Solusi terakhir adalah membuat model Pydantic yang terpisah secara manual. Ini bekerja persis seperti aplikasi FastAPI normal, sehingga Anda dapat menggunakan model respons dan permintaan yang berbeda, dll.
Contoh:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |