亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Pydantic中BaseConfig的具體使用

 更新時間:2024年06月26日 11:32:29   作者:吉小雨  
本文主要介紹了Pydantic中BaseConfig的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

概述

Pydantic是一個用于數(shù)據(jù)驗證和設置管理的Python庫。它可以通過類型注解來自動生成驗證和解析邏輯。BaseConfig是Pydantic模型配置的基類,允許用戶定制模型的行為和驗證規(guī)則。

官方文檔鏈接

Pydantic官方文檔 - BaseConfig

基礎功能

基本配置

BaseConfig提供了許多選項來配置Pydantic模型的行為。下面是一些常用的配置選項:

  • title: 給模型一個標題。
  • anystr_strip_whitespace: 自動去除字符串前后的空白。
  • min_anystr_length: 字符串的最小長度。
  • max_anystr_length: 字符串的最大長度。
  • validate_assignment: 在模型實例創(chuàng)建后進行屬性分配時驗證。

示例代碼

from pydantic import BaseModel

class User(BaseModel):
    name: str
    age: int
    
    class Config:
        title = "User Model"
        anystr_strip_whitespace = True
        min_anystr_length = 2
        max_anystr_length = 50
        validate_assignment = True

# 創(chuàng)建模型實例
user = User(name=" John Doe ", age=30)
print(user.name)  # 輸出: "John Doe"

在這個例子中,User模型去除了name字段的前后空白,并設置了字符串的最小和最大長度。

進階功能

自定義驗證器

可以在配置類中定義自定義驗證器來增加驗證邏輯。

from pydantic import BaseModel, validator

class User(BaseModel):
    name: str
    age: int
    
    class Config:
        validate_assignment = True

    @validator('age')
    def age_must_be_positive(cls, value):
        if value <= 0:
            raise ValueError('Age must be a positive number')
        return value

# 創(chuàng)建模型實例
user = User(name="Jane Doe", age=25)

# 賦值時驗證
user.age = 30  # 成功
user.age = -5  # 拋出 ValueError: Age must be a positive number

高級教程

配置繼承

可以通過繼承BaseConfig類創(chuàng)建一個通用的配置類,并在多個模型中復用。

from pydantic import BaseModel

class CommonConfig:
    anystr_strip_whitespace = True
    min_anystr_length = 2
    max_anystr_length = 50

class User(BaseModel):
    name: str
    age: int
    
    class Config(CommonConfig):
        title = "User Model"

class Product(BaseModel):
    name: str
    price: float
    
    class Config(CommonConfig):
        title = "Product Model"

# 創(chuàng)建模型實例
user = User(name=" John Doe ", age=30)
product = Product(name="  Laptop ", price=999.99)

print(user.name)  # 輸出: "John Doe"
print(product.name)  # 輸出: "Laptop"

通過這種方式,可以將公共配置集中管理,減少重復代碼。

參數(shù)詳解

1. title

為模型指定一個標題。

from pydantic import BaseModel

class User(BaseModel):
    name: str
    age: int
    
    class Config:
        title = "User Model"

print(User.schema())  # 輸出包含 "title": "User Model"

2. anystr_lower

將所有字符串轉換為小寫。

class User(BaseModel):
    name: str
    
    class Config:
        anystr_lower = True

user = User(name="John Doe")
print(user.name)  # 輸出: "john doe"

3. anystr_strip_whitespace

去除字符串前后的空白。

class User(BaseModel):
    name: str
    
    class Config:
        anystr_strip_whitespace = True

user = User(name=" John Doe ")
print(user.name)  # 輸出: "John Doe"

4. min_anystr_length

字符串的最小長度。

class User(BaseModel):
    name: str
    
    class Config:
        min_anystr_length = 2

# user = User(name="A")  # 將拋出驗證錯誤
user = User(name="Ab")
print(user.name)  # 輸出: "Ab"

5. max_anystr_length

字符串的最大長度。

class User(BaseModel):
    name: str
    
    class Config:
        max_anystr_length = 10

# user = User(name="John Doe Long Name")  # 將拋出驗證錯誤
user = User(name="John Doe")
print(user.name)  # 輸出: "John Doe"

6. validate_all

驗證所有字段,而不僅僅是提供的數(shù)據(jù)字段。

class User(BaseModel):
    name: str
    age: int
    
    class Config:
        validate_all = True

# user = User(name="John")  # 將拋出驗證錯誤,因為缺少age字段
user = User(name="John", age=30)
print(user)  # 輸出: name='John' age=30

7. extra

決定在模型中是否允許額外的字段。選項有Extra.ignoreExtra.allowExtra.forbid。

from pydantic import Extra

class User(BaseModel):
    name: str
    
    class Config:
        extra = Extra.forbid

# user = User(name="John", age=30)  # 將拋出驗證錯誤,因為age是多余字段
user = User(name="John")
print(user)  # 輸出: name='John'

8. allow_mutation

是否允許修改模型實例的屬性。

class User(BaseModel):
    name: str
    
    class Config:
        allow_mutation = False

user = User(name="John")
# user.name = "Doe"  # 將拋出驗證錯誤,因為模型不可變
print(user.name)  # 輸出: "John"

9. frozen

如果為True,則模型實例將是不可變的(與allow_mutation相同)。

class User(BaseModel):
    name: str
    
    class Config:
        frozen = True

user = User(name="John")
# user.name = "Doe"  # 將拋出驗證錯誤,因為模型是凍結的
print(user.name)  # 輸出: "John"

10. allow_population_by_field_name

是否允許通過字段名稱填充數(shù)據(jù),而不是別名。

class User(BaseModel):
    full_name: str
    
    class Config:
        allow_population_by_field_name = True
        fields = {
            'full_name': 'name'
        }

user = User(name="John Doe")
print(user.full_name)  # 輸出: "John Doe"

11. use_enum_values

使用枚舉值而不是枚舉實例。

from enum import Enum

class Color(Enum):
    RED = 'red'
    BLUE = 'blue'

class Car(BaseModel):
    color: Color
    
    class Config:
        use_enum_values = True

car = Car(color=Color.RED)
print(car.color)  # 輸出: "red"

12. fields

字段的配置信息,字典形式,鍵為字段名,值為別名或包含別名及其他配置信息的字典。

class User(BaseModel):
    name: str
    
    class Config:
        fields = {
            'name': {'alias': 'full_name'}
        }

user = User(full_name="John Doe")
print(user.name)  # 輸出: "John Doe"

13. validate_assignment

分配新值時驗證字段。

class User(BaseModel):
    age: int
    
    class Config:
        validate_assignment = True

user = User(age=25)
user.age = 30
# user.age = -5  # 將拋出驗證錯誤,因為age必須是正整數(shù)
print(user.age)  # 輸出: 30

14. error_msg_templates

自定義錯誤消息模板。

class User(BaseModel):
    age: int
    
    class Config:
        error_msg_templates = {
            'value_error': 'Invalid value provided.'
        }

# user = User(age=-5)  # 將拋出驗證錯誤: Invalid value provided.
user = User(age=25)
print(user.age)  # 輸出: 25

15. arbitrary_types_allowed

允許使用任意類型。

class CustomType:
    pass

class User(BaseModel):
    custom: CustomType
    
    class Config:
        arbitrary_types_allowed = True

user = User(custom=CustomType())
print(user.custom)  # 輸出: <__main__.CustomType object at 0x...>

16. orm_mode

啟用ORM支持,允許從ORM對象填充數(shù)據(jù)。

class UserOrm:
    def __init__(self, name):
        self.name = name

class User(BaseModel):
    name: str
    
    class Config:
        orm_mode = True

user_orm = UserOrm(name="John Doe")
user = User.from_orm(user_orm)
print(user.name)  # 輸出: "John Doe"

17. getter_dict

自定義getter字典類。

class CustomGetterDict(GetterDict):
    def get(self, item, default=None):
        return f'custom_{super().get(item, default)}'

class User(BaseModel):
    name: str
    
    class Config:
        getter_dict = CustomGetterDict

data = {'name': 'John Doe'}
user = User.parse_obj(data)
print(user.name)  # 輸出: "custom_John Doe"

18. alias_generator

別名生成器函數(shù),用于自動生成字段別名。

class User(BaseModel):
    full_name: str
    
    class Config:
        alias_generator = lambda x: x.upper()

user = User(FULL_NAME="John Doe")
print(user.full_name)  # 輸出: "John Doe"

19. keep_untouched

保持未修改的類型元組。

class SomeType:
    pass

class User(BaseModel):
    some: SomeType
    
    class Config:
        keep_untouched = (SomeType,)

user = User(some=SomeType())
print(user.some)  # 輸出: <__main__.SomeType object at 0x...>

20. schema_extra

額外的JSON模式定義,可以是字典或返回字典的可調用對象。

class User(BaseModel):
    name: str
    age: int
    
    class Config:
        schema_extra = {
            "example": {
                "name": "John Doe",
                "age": 30
            }
        }

print(User.schema_json(indent=2))  # 輸出包含 "example": {"name": "John Doe", "age": 30}

21. json_loads

自定義JSON加載函數(shù)。

import json

def custom_json_loads(value):
    return json.loads(value)

class User(BaseModel):
    name: str
    
    class Config:
        json_loads = custom_json_loads

user = User.parse_raw('{"name": "John Doe"}')
print(user.name)  # 輸出: "John Doe"

22. json_dumps

自定義JSON序列化函數(shù)。

import json

def custom_json_dumps(value, **kwargs):
    return json.dumps(value, **kwargs)

class User(BaseModel):
    name: str
    
    class Config:
        json_dumps = custom_json_dumps

user = User(name="John Doe")
print(user.json())  # 輸出: {"name": "John Doe"}

23. json_encoders

自定義JSON編碼器字典,鍵為類型或字符串,值為編碼函數(shù)。

from datetime import datetime

class User(BaseModel):
    created_at: datetime
    
    class Config:
        json_encoders = {
            datetime: lambda v: v.isoformat()
        }

user = User(created_at=datetime(2020, 1, 1))
print(user.json())  # 輸出: {"created_at": "2020-01-01T00:00:00"}

24. underscore_attrs_are_private

以下劃線開頭的屬性是否被視為私有。

class User(BaseModel):
    _private: str
    
    class Config:
        underscore_attrs_are_private = True

user = User(_private="secret")
print(user.dict())  # 輸出: {}

25. copy_on_model_validation

是否在模型驗證時復制繼承的模型。

class BaseModelWithConfig(BaseModel):
    class Config:
        copy_on_model_validation = True

class User(BaseModelWithConfig):
    name: str

user = User(name="John")
print(user.name)  # 輸出: "John"

26. smart_union

是否在嘗試轉換前檢查所有允許的類型。

from typing import Union

class User(BaseModel):
    value: Union[int, str]
    
    class Config:
        smart_union = True

user = User(value="123")
print(user.value)  # 輸出: "123"

希望這些示例代碼能幫助你更好地理解Pydantic中BaseConfig類的各個參數(shù)及其用法。

總結

BaseConfig提供了強大的配置選項,使得Pydantic模型更加靈活和可定制。通過掌握這些配置選項,可以更加高效地進行數(shù)據(jù)驗證和管理。

到此這篇關于Pydantic中BaseConfig的具體使用的文章就介紹到這了,更多相關Pydantic BaseConfig內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • TensorFlow繪制loss/accuracy曲線的實例

    TensorFlow繪制loss/accuracy曲線的實例

    今天小編就為大家分享一篇TensorFlow繪制loss/accuracy曲線的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • wxpython布局的實現(xiàn)方法

    wxpython布局的實現(xiàn)方法

    這篇文章主要介紹了wxpython布局的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • 使用PyWeChatSpy自動回復微信拍一拍功能的實現(xiàn)代碼

    使用PyWeChatSpy自動回復微信拍一拍功能的實現(xiàn)代碼

    這篇文章主要介紹了用PyWeChatSpy自動回復微信拍一拍功能,本文通過實例圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 手把手教你用python繪制熱度圖(heatmap)

    手把手教你用python繪制熱度圖(heatmap)

    我們在做諸如人群密集度等可視化的時候,可能會考慮使用熱力圖,在Python中能很方便地繪制熱力圖,下面這篇文章主要給大家介紹了關于用python繪制熱度圖(heatmap)的相關資料,需要的朋友可以參考下
    2022-12-12
  • 總結Python函數(shù)參數(shù)的六種類型

    總結Python函數(shù)參數(shù)的六種類型

    這篇文章主要總結了Python函數(shù)參數(shù)的六種類型,傳遞參數(shù)實現(xiàn)不同場景的靈活使用,下面總結的六種函數(shù)參數(shù)類型,需要的小伙伴可以參考一下
    2022-03-03
  • 深入分析python數(shù)據(jù)挖掘 Json結構分析

    深入分析python數(shù)據(jù)挖掘 Json結構分析

    這篇文章通過實例給大家分析總結了python數(shù)據(jù)挖掘以及Json結構分析的相關知識點,對此有興趣的朋友參考下。
    2018-04-04
  • Jupyter notebook無法導入第三方模塊的解決方式

    Jupyter notebook無法導入第三方模塊的解決方式

    這篇文章主要介紹了Jupyter notebook無法導入第三方模塊的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • python創(chuàng)建學生管理系統(tǒng)

    python創(chuàng)建學生管理系統(tǒng)

    這篇文章主要為大家詳細介紹了python創(chuàng)建學生管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 如何使用celery進行異步處理和定時任務(django)

    如何使用celery進行異步處理和定時任務(django)

    文章介紹了Celery的基本概念、安裝方法、如何使用Celery進行異步任務處理以及如何設置定時任務,通過Celery,可以在Web應用中處理后臺任務,如發(fā)送郵件、視頻轉碼等,而不阻塞Web請求,文章還提到了啟動Celery worker和beat的命令以及任務和定時任務的執(zhí)行效果
    2025-01-01
  • 在Python的Django框架中為代碼添加注釋的方法

    在Python的Django框架中為代碼添加注釋的方法

    這篇文章主要介紹了在Python的Django框架中為代碼添加注釋的方法,需要的朋友可以參考下
    2015-07-07

最新評論