विषय पर बढ़ें

जवाब दो

आप फास्टापी प्रतिक्रिया \ _ मॉडल में pydके बजाय ormar नमूना नमूना के बजाय ormar का उपयोग कर सकते हैं।

आप 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 ()

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

!!!ध्यान दें कि यद्यपि आपने फ़ील्ड मान पास नहीं किया है, फ़ील्ड अभी भी प्रतिक्रिया \ _ मॉडल में मौजूद है, जो माध्य यह प्रतिक्रिया डेटा में दिखाई देगा और कोई नहीं पर सेट हो जाएगा।

1
यदि आप पढ़े गए परिणाम से फ़ील्ड को पूरी तरह से बाहर करना चाहते हैं।

FApi प्रतिक्रिया _मॉडल _बाहर

Fमें एक प्रतिक्रिया \ _ मॉडल \ _ है जो एक सेट को स्वीकार करता है (or list) of क्षेत्र के नाम।

इसकी सीमाएं हैं क्योंकि mar और dभी शब्दकोशों को स्वीकार करते हैं जहां आप बहिष्करण / समावेश कॉलम या नेस्टेड मॉडल सेट कर सकते हैं (more on this below).

चेतावनी ध्यान दें कि प्रतिक्रिया \ _ मॉडल का उपयोग करते समय एक आवश्यक फ़ील्ड को बाहर नहीं किया जा सकता है, क्योंकि यह सत्यापन के दौरान विफल हो जाएगा।

1
2
3
@ app.post ("/ उपयोगकर्ता /", प्रतिक्रिया _ मॉडल = उपयोगकर्ता, प्रतिक्रिया _ मॉडल _ बाहर ={"password"})
Ac def create_user (user: User):
    वापसी user.save ()

उपरोक्त समापन बिंदु को इस तरह से समझा जा सकता है:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
से te.आयात Testent

क्लाइंट = टेस्टक्लाइंट (ऐप)

ग्राहकों के रूप में ग्राहकों के साथ:
        # नोट कोई पीके नहीं है
        उपयोगकर्ता = {
            "ईमेल": test@domain.com
            "पासवर्ड": "^*^% A** IAAA",
            "पहला_नाम": "जॉन",
            "अंतिम_नाम": "डो",
        }
        प्रतिक्रिया = client.post ("/ उपयोगकर्ता /", json = उपयोगकर्ता)
        # ध्यान दें कि बहिष्कृत फ़ील्ड प्रतिक्रिया से पूरी तरह से चला गया है
        प्रतिक्रिया में "पासवर्ड" न डालें ।json ()
        # प्रतिक्रिया पढ़ें और इसमें से नमूना को आरंभ करें
        बनाया _ उपयोगकर्ता = उपयोगकर्ता (** response.json ())
        #note pk ऑटोइन्क्रिमेंट द्वारा आबाद है
        created_user.pk कोई नहीं है
        # ध्यान दें कि पासवर्ड इनिशियलाइज्ड नमूना में भी गायब है
        बनाया गया _ उपयोगकर्ता पासवर्ड कोई नहीं है

ध्यान दें कि ऊपर दिए गए उदाहरण में प्रतिक्रिया डेटा से पासवर्ड फ़ील्ड पूरी तरह से कैसे गायब हो जाती है।

1
ध्यान दें कि आप इस विधि का उपयोग केवल गैर-आवश्यक फ़ील्ड के लिए कर सकते हैं।

नेस्टेड नमूना

हालांकि फास्टापी केवल फ़ील्ड नामों के एक सेट को पारित करने की अनुमति देता है, इसलिए इसे बस बाहर रखा गया है, प्रतिक्रिया \ _ मॉडल \ _ का उपयोग करते समय ormar स्मार्ट है।

ओमार में, आप नेस्टेड मॉडल को बाहर करने के लिए दो प्रकार के संकेतन का उपयोग कर सकते हैं।

पहला नेस्टेड फ़ील्ड के साथ एक शब्दकोश है जो नमूना ट्री संरचना का प्रतिनिधित्व करता है, और दूसरा फ़ील्ड नामों के लिए एक डबल-रेखांकित पथ है।

मान लीजिए कि हमारी उपयोगकर्ता श्रेणी एक अलग नमूना है:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
base_ormar_config = ormar। marConfig (
    मेटाडेटा = मेटाडेटा
    डेटाबेस = डेटाबेस
)

कक्षा श्रेणी (ormar. Model):
    ormar_config = base_ormar_config (टेबलनाम = "श्रेणियाँ")

    आईडी: int = ormar। पूर्णांक (primary_key = True)
    नाम: str = ormar। स्ट्रिंग (max_length = 255)
    प्राथमिकता: int = ormar। पूर्णांक (nullable = True)


कक्षा उपयोगकर्ता (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)
    श्रेणी: वैकल्पिक [श्रेणी] = ormar। विदेशी (श्रेणी, संबंधित _ नाम = "श्रेणियां")

यदि आप प्रतिक्रिया में श्रेणियों से प्राथमिकता को बाहर करना चाहते हैं, तो आप अभी भी पैरामीटर का उपयोग कर सकते हैं।

1
2
3
@ app.post ("/ उपयोगकर्ता /", प्रतिक्रिया _ मॉडल = उपयोगकर्ता, प्रतिक्रिया _ मॉडल _ बाहर ={"category__priority"})
Ac def create_user (user: User):
    वापसी user.save ()

ध्यान दें कि आप नमूना में गहराई से जाने के लिए डबल अंडरस्कोर का उपयोग कर सकते हैं, और यदि आप नेस्टेड नमूना से कई क्षेत्रों को बाहर करना चाहते हैं, तो आपको उन्हें पूर्ण पथ के साथ पूर्ववर्ती करने की आवश्यकता है। उदाहरण मेंresponse_model_exclude={"category__priority", "category__other_field", category__nested_model__nested_model_field} ETC।

!!!नोट संभावित बहिष्करण के बारे में अधिक पढ़ने के लिए और बहिष्करण शब्दकोश या सेटिंग्स का निर्माण कैसे करें, प्रलेखन के क्षेत्र अनुभाग पर जाएं

ध्यान दें कि प्रतिक्रिया के अलावा \ _ मॉडल \ _ मापदंडों को बाहर करें, फास्टापी pydसे विरासत में मिले अन्य मापदंडों का भी समर्थन करता है। यह सब ormar के साथ भी काम करता है, लेकिन कुछ बारीकियां हो सकती हैं, इसलिए प्रलेखन के निर्णय अनुभाग को पढ़ना सबसे अच्छा है।

मॉडल.मॉडल \ _ डंप () में छोड़ें

या, आप बस ormar से एक शब्दकोश वापस कर सकते हैं। मॉडल और इसका उपयोग करें।

इस तरह, आप एक शब्दकोश के रूप में बहिष्कृत / शामिल करें और नेस्टेड मॉडल पर फ़ील्ड को बाहर कर सकते हैं।

!!!चेतावनी प्रतिक्रिया \ _ मॉडल का उपयोग नहीं करने से एपीआई प्रलेखन में कोई प्रतिक्रिया उदाहरण और स्कीमा नहीं होगा, क्योंकि सिद्धांत रूप में प्रतिक्रिया का कोई प्रारूप हो सकता है।

1
2
3
4
5
@ app.post ("/ users2 /", प्रतिक्रिया _ मॉडल = उपयोगकर्ता)
Ac def create_user2 (user: User):
    उपयोगकर्ता = प्रतीक्षा user.save ()
    उपयोगकर्ता मॉडल लौटें _ डंप (exclude ={'password'})
    # रिटर्न उपयोगकर्ता की तरह भी कुछ हो सकता है। model_dump (exout = {'category': {'priority'}}) श्रेणी प्राथमिकता को बाहर करने के लिए

!!!ध्यान दें कि यदि आप अनुरोध में पासवर्ड फ़ील्ड पास करते हैं, तो भी उपरोक्त उदाहरण पासवर्ड फ़ील्ड को अमान्य बना देगा, लेकिन फ़ील्ड अभी भी मौजूद होगी क्योंकि यह प्रतिक्रिया स्कीमा का हिस्सा है और मान कोई नहीं पर सेट किया जाएगा।

यदि आप फ़ील्ड को पूरी तरह से इस तरह से बाहर करना चाहते हैं, तो बस प्रतिक्रिया \ _ मॉडल का उपयोग न करें और इसे नमूना \ _ डंप () में बाहर करें

या, आप बस एक ormar नमूना से एक शब्दकोश वापस कर सकते हैं। इस तरह, आप एक शब्दकोश में बहिष्करण / शामिल भी कर सकते हैं और नेस्टेड मॉडल पर फ़ील्ड को बाहर कर सकते हैं।

!!!ध्यान दें कि सिद्धांत रूप में, आप यहां प्रतिक्रिया सत्यापन खो देते हैं, लेकिन जब से आप ormar पर काम कर रहे हैं। मॉडल, डेटाबेस क्वेरी के बाद प्रतिक्रिया डेटा पहले से ही मान्य है (क्योंकि ormar मॉडल pydमॉडल हैं)।

इसलिए यदि आप प्रतिक्रिया \ _ मॉडल को पूरी तरह से छोड़ देते हैं, तो आप निम्नलिखित कर सकते हैं:

1
2
3
4
@ app.post ("/users4/") #note no responsion_model
Ac def create_user4 (user: User):
    उपयोगकर्ता = प्रतीक्षा user.save ()
    उपयोगकर्ता मॉडल लौटें _ डंप (exclude ={'last_name'})

!!!ध्यान दें कि जब आप प्रतिक्रिया \ _ मॉडल छोड़ते हैं, तो आप अब आवश्यक फ़ील्ड को भी बाहर कर सकते हैं क्योंकि प्रतिक्रिया अब लौटने के बाद मान्य नहीं है।

1
इस समाधान की लागत यह है कि आप फास्टापी परिप्रेक्ष्य से अज्ञात में प्रतिक्रिया स्कीमा के रूप में एपीआई प्रलेखन को भी ढीला करते हैं।

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

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

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

1
2
3
4
5
# उपयोगकर्ताओं पर पासवर्ड के बिना और नेस्टेड श्रेणियों पर प्राथमिकता के बिना मॉडल का एक पेड़ उत्पन्न करें
se= उपयोगकर्ता। get_pydantic (बाहर = {"पासवर्ड": ..., "श्रेणी":{"priority"}})
@ app.post ("/users3 /", responsion_model = ResponseUser) # यहां उत्पन्न नमूना का उपयोग करें
Ac def create_user3 (user: User):
    वापसी user.save ()

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

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

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

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

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

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

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

नमूना:

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

क्लास यूजरबेस (pydantic. BaseModel):
    model_config = pydantic। कॉन्फ़िगर करें (from _actities = True)

    ईमेल: str
    पहला_नाम: str
    अंतिम _ नाम: str


@ app.post ("/users3 /", responsion_model = UserBase) #use pydयहाँ नमूना
Ac def create_user3 (user: User): #use ormar यहाँ नमूना (लेकिन निश्चित रूप से आप यहाँ भी pydका उपयोग कर सकते हैं)
    वापसी user.save ()