रहस्य
!!! चेतावनी "🚧 कार्य प्रगति पर है" यह पृष्ठ कार्य प्रगति पर है।
SecretStr
और SecretBytes
सादे-पाठ के रूप में क्रमबद्ध करें¶
डिफ़ॉल्ट रूप से, SecretStr
और SecretBytes
को json पर क्रमबद्ध करते समय **********
के रूप में क्रमबद्ध किया जाएगा।
आप json पर क्रमबद्ध करते समय रहस्य को सादे-पाठ के रूप में डंप करने के लिए field_serializer
का उपयोग कर सकते हैं।
from pydantic import BaseModel, SecretBytes, SecretStr, field_serializer
class Model(BaseModel):
password: SecretStr
password_bytes: SecretBytes
@field_serializer('password', 'password_bytes', when_used='json')
def dump_secret(self, v):
return v.get_secret_value()
model = Model(password='IAmSensitive', password_bytes=b'IAmSensitiveBytes')
print(model)
#> password=SecretStr('**********') password_bytes=SecretBytes(b'**********')
print(model.password)
#> **********
print(model.model_dump())
"""
{
'password': SecretStr('**********'),
'password_bytes': SecretBytes(b'**********'),
}
"""
print(model.model_dump_json())
#> {"password":"IAmSensitive","password_bytes":"IAmSensitiveBytes"}
अपना खुद का गुप्त क्षेत्र बनाएं¶
पाइडेंटिक कस्टम गुप्त प्रकार बनाने के लिए एक तंत्र के रूप में सामान्य Secret
वर्ग प्रदान करता है।
??? एपीआई "एपीआई दस्तावेज़ीकरण" pydantic.types.Secret
पाइडेंटिक कस्टम गुप्त प्रकार बनाने के लिए एक तंत्र के रूप में सामान्य Secret
वर्ग प्रदान करता है। आप किसी गुप्त प्रकार के str()
और repr()
अनुकूलित करने के लिए या तो सीधे Secret
पैरामीट्रिज कर सकते हैं, या पैरामीट्रिज्ड Secret
से उपवर्ग बना सकते हैं।
from datetime import date
from pydantic import BaseModel, Secret
# Using the default representation
SecretDate = Secret[date]
# Overwriting the representation
class SecretSalary(Secret[float]):
def _display(self) -> str:
return '$****.**'
class Employee(BaseModel):
date_of_birth: SecretDate
salary: SecretSalary
employee = Employee(date_of_birth='1990-01-01', salary=42)
print(employee)
#> date_of_birth=Secret('**********') salary=SecretSalary('$****.**')
print(employee.salary)
#> $****.**
print(employee.salary.get_secret_value())
#> 42.0
print(employee.date_of_birth)
#> **********
print(employee.date_of_birth.get_secret_value())
#> 1990-01-01
आप एनोटेशन के माध्यम से अंतर्निहित प्रकार पर प्रतिबंध लागू कर सकते हैं: उदाहरण के लिए:
from typing_extensions import Annotated
from pydantic import BaseModel, Field, Secret, ValidationError
SecretPosInt = Secret[Annotated[int, Field(gt=0, strict=True)]]
class Model(BaseModel):
sensitive_int: SecretPosInt
m = Model(sensitive_int=42)
print(m.model_dump())
#> {'sensitive_int': Secret('**********')}
try:
m = Model(sensitive_int=-42) # (1)!
except ValidationError as exc_info:
print(exc_info.errors(include_url=False, include_input=False))
"""
[
{
'type': 'greater_than',
'loc': ('sensitive_int',),
'msg': 'Input should be greater than 0',
'ctx': {'gt': 0},
}
]
"""
try:
m = Model(sensitive_int='42') # (2)!
except ValidationError as exc_info:
print(exc_info.errors(include_url=False, include_input=False))
"""
[
{
'type': 'int_type',
'loc': ('sensitive_int',),
'msg': 'Input should be a valid integer',
}
]
"""
- इनपुट मान 0 से अधिक नहीं है, इसलिए यह एक सत्यापन त्रुटि उत्पन्न करता है।
- इनपुट मान एक पूर्णांक नहीं है, इसलिए यह एक सत्यापन त्रुटि उत्पन्न करता है क्योंकि
SecretPosInt
प्रकार में सख्त मोड सक्षम है।
本文总阅读量次