मान्य करने के लिए एक मौजूदा मॉडल को देखते हुए, नीचे एक की तरह (लेकिन यह एक साधारण शब्दकोश या किसी डेटा संरचना के बाद से pyvaru डेटा पर किसी भी धारणा नहीं है हो सकता है प्रारूप):
class User:
def __init__(self, first_name: str, last_name: str, date_of_birth: datetime, sex: str):
self.first_name = first_name
self.last_name = last_name
self.date_of_birth = date_of_birth
self.sex = sex
हम get_rules() विधि को लागू करने से और प्रत्येक क्षेत्र हम मान्य करने के लिए हम एक या अधिक उचित नियम (रों) प्रदान करने के लिए चाहते हैं के लिए, एक सत्यापनकर्ता परिभाषित करने के लिए किया है।
एक संदर्भ प्रोसेसर के रूप में::
from pyvaru import Validator
from pyvaru.rules import TypeRule, FullStringRule, ChoiceRule, PastDateRule
class UserValidator(Validator):
def get_rules(self) -> list:
user = self.data # type: User
return [
TypeRule(apply_to=user,
label='User',
valid_type=User,
error_message='User must be an instance of user model.',
stop_if_invalid=True),
FullStringRule(user.first_name, 'First name'),
FullStringRule(user.last_name, 'Last name'),
ChoiceRule(user.sex, 'Sex', choices=('M', 'F')),
PastDateRule(user.date_of_birth, 'Date of birth')
]
अंत में हम कैसे हमारे कस्टम सत्यापनकर्ता का उपयोग करने के बारे में दो विकल्प हैं
with UserValidator(user):
# do whatever you want with your valid model
कोड के अंदर इस मामले में साथ ही अगर निष्पादित किया जाएगा प्रमाणीकरण सफल होता है, अन्यथा प्रमाणीकरण अपवाद (उचित रिपोर्ट के साथ validation_result संपत्ति) उठाया जाता है।
सत्यापित करें() विधि (जो एक ValidationResult रिटर्न)
validation = UserValidator(user).validate()
if validation.is_successful():
# do whatever you want with your valid model
else:
# you can take a proper action and access validation.errors
# in order to provide a useful message to the application user,
# write logs or whatever
लागू मान लिया जाये कि हम एक उपयोगकर्ता नीचे एक के रूप में विन्यस्त का एक उदाहरण है द्वारा:
user = User(first_name=' ',
last_name=None,
date_of_birth=datetime(2020, 1, 1),
sex='unknown')
के साथ एक मान्यता चलाकर पिछले परिभाषित नियमों को हम निम्नलिखित त्रुटियों के साथ एक सत्यापन प्रमाणीकरण प्राप्त करेंगे:
{
'First name': ['String is empty.'],
'Last name': ['Not a string.'],
'Sex': ['Value not found in available choices.'],
'Date of birth': ['Not a past date.']
}
मैं इस से वास्तव में परिचित नहीं हूं, लेकिन मुझे लगता है कि आप एक ओआरएम का उपयोग करना चाहेंगे (http://stackoverflow.com/questions/2781682/mongodb-orm-for-python देखें) - हालांकि आप खो देंगे एक NoSQL डीबी की लचीलापन। –
धन्यवाद। मैं ओआरएम का उपयोग करने की संभावना के बारे में जानता हूं लेकिन इस मामले में मैं सीधे मोंगोडीबी डेटाबेस में हेरफेर करना चाहता हूं। – anujkk
https://github.com/nicolaiarocci/cerberus/। मुझे कामुक पसंद है लेकिन अब सेर्बरस पसंद करते हैं। सभी नियमों को मानवीय पठनीय यामल फ़ाइल में घोषित किया जा सकता है, जो कि उदार और अन्य पुस्तकालयों में कॉलबेल की आवश्यकता के विपरीत है। – chishaku