विषय पर बढ़ें

अनुरोध

आप Fअनुरोध बॉडी मापदंडों में dके बजाय marmar नमूना नमूना के बजाय marmar का उपयोग कर सकते हैं।

आप ormar भी मिला सकते हैं। यदि आवश्यक हो तो pydके साथ मॉडल।

एक अनुरोध में सबसे आम कार्यों में से एक कुछ क्षेत्रों को बाहर करना है जिन्हें आप एपीआई को भेजे गए पेलोड में शामिल नहीं करना चाहते हैं।

यह मार में विभिन्न तरीकों से प्राप्त किया जा सकता है, इसलिए आप नीचे दिए गए अपने विकल्पों की समीक्षा कर सकते हैं और वह चुन सकते हैं जो आपकी स्थिति के लिए सबसे अच्छा है।

अनुरोधों से फ़ील्ड को छोड़ें

वैकल्पिक क्षेत्र

कृपया ध्यान दें कि प्रत्येक वैकल्पिक फ़ील्ड की आवश्यकता नहीं है, जो माध्य कि वैकल्पिक फ़ील्ड को प्रतिक्रियाओं और अनुरोधों दोनों में छोड़ दिया जा सकता है।

निम्नलिखित में से यदि (any/many/all) होता है तो फ़ील्ड की आवश्यकता नहीं होती है:

  • फ़ील्ड को अशक्त = सत्य के रूप में चिह्नित किया गया है
  • फ़ील्ड में एक डिफ़ॉल्ट मान या प्रदान की गई कार्यक्षमता है, अर्थात् डिफ़ॉल्ट = "परीक्षण"
  • फ़ील्ड सर्वर \ _ डिफ़ॉल्ट मान सेट करता है
  • फ़ील्ड एक autoincrement=Trueprimary है \ _ कुंजी फ़ील्ड (नोट ormar. ger\ _ कुंजी डिफ़ॉल्ट ऑटोइन्क्रिमेंट है)

उदाहरण:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
base_ormar_config = ormar। marConfig (
    मेटाडेटा = मेटाडेटा
    डेटाबेस = डेटाबेस
)

कक्षा उपयोगकर्ता (ormar. Model):
    ormar _ config = आधार _ ormar _ config कॉपी ()

    आईडी: int = ormar। पूर्णांक (primary_key = True)
    ईमेल: str = ormar। स्ट्रिंग (max_length = 255)
    पासवर्ड: str = ormar। स्ट्रिंग (max_length = 255)
    पहला_नाम: str = ormar। स्ट्रिंग (max_length = 255, null= True)
    last_name: str = ormar। स्ट्रिंग (max_length = 255)
    श्रेणी: str = ormar। स्ट्रिंग (max_length = 255, डिफ़ॉल्ट = "उपयोगकर्ता")

ऊपर दिए गए उदाहरण में, फ़ील्ड आईडी (जो एक ऑटो-इन्क्रीमेंटिंग पूर्णांक है), पहला \ _ नाम (जिसमें अशक्त = सत्य है), और श्रेणी (जिसमें डिफ़ॉल्ट मान है) वैकल्पिक हैं, प्रतिक्रिया में छोड़ दिया जा सकता है, और नमूना अभी भी मान्य किया जाएगा।

यदि फ़ील्ड अशक्त है, तो इसे निर्माण के दौरान और प्रतिक्रिया में पेलोड में शामिल नहीं किया जाना है, इसलिए ऊपर दिए गए उदाहरण के अनुसार, आप कर सकते हैं:

!!! चेतावनी ध्यान दें कि जब आपको वैकल्पिक फ़ील्ड पास नहीं करना है, तब भी आप ऐसा कर सकते हैं। यदि कोई मान पास करता है, तो इसका उपयोग बाद में किया जाएगा, जब तक कि आप इसे रोकने के लिए कदम नहीं उठाते।

1
2
3
4
# ध्यान दें कि ऐप एक FApi ऐप है
@ app.post ("/users/", responsion_model = User) # यहाँ हम ormar का उपयोग करते हैं। प्रतिक्रिया में मॉडल
Ac def create_user (user: User): # यहाँ हम ormar का उपयोग करते हैं। अनुरोध पैरामीटर में मॉडल
    वापसी user.save ()

यह माध्य है कि यदि आप अनुरोध में पहले \ _ नाम पास नहीं करते हैं, तो यह सही ढंग से मान्य होगा (क्योंकि फ़ील्ड वैकल्पिक है) और डेटाबेस में कोई भी सहेजा नहीं जाएगा।

ओमार से पाइडेंटिक मॉडल बनाना। मॉडल

चूंकि फ़ील्ड को बाहर करने का कार्य बहुत आम है, इसलिए मौजूदा ormar से dमॉडल उत्पन्न करने का एक विशेष तरीका है। सभी फ़ील्ड में फिर से प्रवेश किए बिना मॉडल।

यह विधि सभी नमूना वर्गों के लिए उपलब्ध \ _ pyd() विधि है।

1
2
3
4
5
6
# उपयोगकर्ताओं पर पासवर्ड के बिना और नेस्टेड श्रेणियों पर प्राथमिकता के बिना मॉडल का एक पेड़ उत्पन्न करें
अनुरोधकर्ता = उपयोगकर्ता। get_pydantic (बाहर = {"पासवर्ड": ..., "श्रेणी":{"priority"}})
@ app.post ("/ users3 /", responsion_model = User) # यहाँ आप ormar / pydदोनों का भी उपयोग कर सकते हैं
Ac def create_user3 (user: RequestUser): # यहां उत्पन्न नमूना का उपयोग करें
    #note कैसे अब उपयोगकर्ता pydहै और ormar मॉडल नहीं है इसलिए आपको परिवर्तित करने की आवश्यकता है
    वापसी का इंतजार उपयोगकर्ता (** user. model_dmp) ()).save ()

!!! नोट अधिक उदाहरण देखने और अधिक पढ़ने के लिए, प्रलेखन के \ _ pydअनुभाग पर जाएं।

चेतावनी प्राप्त करें \ _ pydantic विधि एक एल्गोरिथ्म के आधार पर नेस्टेड नमूना ट्री में सभी मॉडल उत्पन्न करती है जो नमूना में छोरों से बचने की अनुमति देती है (एक ही एल्गोरिथ्म जिसका उपयोग नमूना \ _ डंप में किया जाता है (), select\ _all (), आदि)

1
2
3
यह माध्य कि नेस्टेड मॉडल में मूल मॉडल (डिफ़ॉल्ट रूप से ormar संबंध द्विदिश है) के संदर्भ नहीं होंगे।

यह भी ध्यान दें कि यदि एक दिए गए नमूना एक पेड़ में मौजूद से अधिक एक बार यह pydमॉडल में दोगुना हो जाएगा (प्रत्येक घटना के अलग-अलग मॉडल होंगे)।

इस तरह आप पेड़ के विभिन्न पत्तों पर विभिन्न क्षेत्रों को बाहर / शामिल कर सकते हैं।

Py और टाइप चेकिंग

कृपया ध्यान दें कि पायथन प्रकार के रूप में एक फ़ंक्शन असाइन करना रनटाइम पर गुजरता है (क्योंकि यह चेक नहीं किया गया है), और स्थैतिक प्रकार के चेकर्स जैसे Py शिकायत करते हैं।

यद्यपि फ़ंक्शन कॉल का परिणाम किसी दिए गए नमूना के लिए हमेशा समान होता है, गतिशील रूप से बनाए गए प्रकारों की अनुमति नहीं है।

तो आपके पास दो विकल्प हैं:

पहला बस # प्रकार जोड़ना है: प्रकार की जाँच को छोड़ने के लिए अनदेखा करें

1
2
3
4
5
अनुरोधकर्ता = उपयोगकर्ता। get_pydantic (बाहर = {"पासवर्ड": ..., "श्रेणी":{"priority"}})
@ app.post ("/ users3 /", प्रतिक्रिया _ मॉडल = उपयोगकर्ता)
Ac def create_user3 (user: RequestUser): # प्रकार: अनदेखा करें
    #note कैसे अब उपयोगकर्ता ormar मॉडल नहीं है इसलिए आपको परिवर्तित करने की आवश्यकता है
    वापसी का इंतजार उपयोगकर्ता (** user. model_dmp) ()).save ()

फ़ंक्शन मापदंडों को निकालने के लिए Fका उपयोग करके दूसरा थोड़ा अधिक हैक है।

आप दिए गए पैरामीटर के \ _ \ को ओवरराइड कर सकते हैं।_एनोटेशन _\ _ प्रविष्टि।

1
2
3
4
5
6
7
8
अनुरोधकर्ता = उपयोगकर्ता। get_pydantic (बाहर = {"पासवर्ड": ..., "श्रेणी":{"priority"}})
# ऐप डेकोरेटर का उपयोग न करें
Ac def create_user3 (user: User): #use ormar यहाँ नमूना
    वापसी का इंतजार उपयोगकर्ता (** user. model_dmp) ()).save ()
# उत्पन्न मॉडल के साथ उपयोगकर्ता parके लिए फ़ंक्शन एनोटेशन प्रविष्टि को अधिलेखित करें
बनाएँ_user3__annotations__ ["user"] = अनुरोध
# मैन्युअल रूप से ऐप फ़ंक्शन (app.get, etc.) app.post और अपना फ़ंक्शन संदर्भ पास करें
app.post ("/ श्रेणियां /", प्रतिक्रिया _ मॉडल = उपयोगकर्ता) (create_user3)

ध्यान दें कि यह खस्ता को "सोचने" का कारण बनेगा कि उपयोगकर्ता एक ormar नमूना है, लेकिन चूंकि यह अनुरोध में कोई फर्क नहीं पड़ता है (आप वैसे भी एक jsonपास करेंगे और बचत से पहले परिवर्तित करने की आवश्यकता होगी)।

यह अभी भी ठीक काम करना चाहिए क्योंकि परिणामी नमूना खेतों का एक सबसेट होगा, इसलिए सभी आवश्यक फ़ील्ड मान्य होंगे, और सभी अप्रयुक्त फ़ील्ड रनटाइम पर विफल हो जाएंगे।

स्वतंत्र ब्रैकट नमूना

अंतिम समाधान मैन्युअल रूप से अलग dमॉडल बनाना है। यह बिल्कुल एक सामान्य Fएप्लिकेशन की तरह काम करता है, इसलिए आप विभिन्न प्रतिक्रिया और अनुरोध मॉडल आदि का उपयोग कर सकते हैं।

नमूना:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
पाइडेंटिक आयात करें

कक्षा उपयोगकर्ता बनाएँ (pydantic. BaseModel):
    model_config = pydantic। कॉन्फ़िगर करें (from _actities = True)

    ईमेल: str
    पहला_नाम: str
    अंतिम _ नाम: str
    पासवर्ड: str


@ app.post ("/users3 /", responsion_model = User) #use ormar यहाँ नमूना (लेकिन निश्चित रूप से आप यहाँ भी pydका उपयोग कर सकते हैं)
Ac def create_user3 (user: UserCreate): #use pydयहाँ नमूना
    #note कैसे अब अनुरोध परम एक pydनमूना है और ormar एक नहीं
    # तो आपको डेटाबेस का उपयोग करने से पहले इसे पार्स / कन्वर्ट करने की आवश्यकता है
    वापसी का इंतजार उपयोगकर्ता (** user. model_dmp) ()).save ()