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

Pydantic中BaseConfig的具體使用

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

概述

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

官方文檔鏈接

Pydantic官方文檔 - BaseConfig

基礎(chǔ)功能

基本配置

BaseConfig提供了許多選項(xiàng)來(lái)配置Pydantic模型的行為。下面是一些常用的配置選項(xiàng):

  • title: 給模型一個(gè)標(biāo)題。
  • anystr_strip_whitespace: 自動(dòng)去除字符串前后的空白。
  • min_anystr_length: 字符串的最小長(zhǎng)度。
  • max_anystr_length: 字符串的最大長(zhǎng)度。
  • validate_assignment: 在模型實(shí)例創(chuàng)建后進(jìn)行屬性分配時(shí)驗(yàn)證。

示例代碼

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)建模型實(shí)例
user = User(name=" John Doe ", age=30)
print(user.name)  # 輸出: "John Doe"

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

進(jìn)階功能

自定義驗(yàn)證器

可以在配置類中定義自定義驗(yàn)證器來(lái)增加驗(yàn)證邏輯。

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)建模型實(shí)例
user = User(name="Jane Doe", age=25)

# 賦值時(shí)驗(yàn)證
user.age = 30  # 成功
user.age = -5  # 拋出 ValueError: Age must be a positive number

高級(jí)教程

配置繼承

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

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)建模型實(shí)例
user = User(name=" John Doe ", age=30)
product = Product(name="  Laptop ", price=999.99)

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

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

參數(shù)詳解

1. title

為模型指定一個(gè)標(biāo)題。

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

將所有字符串轉(zhuǎn)換為小寫。

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

字符串的最小長(zhǎng)度。

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

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

5. max_anystr_length

字符串的最大長(zhǎng)度。

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

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

6. validate_all

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

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

# user = User(name="John")  # 將拋出驗(yàn)證錯(cuò)誤,因?yàn)槿鄙賏ge字段
user = User(name="John", age=30)
print(user)  # 輸出: name='John' age=30

7. extra

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

from pydantic import Extra

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

# user = User(name="John", age=30)  # 將拋出驗(yàn)證錯(cuò)誤,因?yàn)閍ge是多余字段
user = User(name="John")
print(user)  # 輸出: name='John'

8. allow_mutation

是否允許修改模型實(shí)例的屬性。

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

user = User(name="John")
# user.name = "Doe"  # 將拋出驗(yàn)證錯(cuò)誤,因?yàn)槟P筒豢勺?
print(user.name)  # 輸出: "John"

9. frozen

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

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

user = User(name="John")
# user.name = "Doe"  # 將拋出驗(yàn)證錯(cuò)誤,因?yàn)槟P褪莾鼋Y(jié)的
print(user.name)  # 輸出: "John"

10. allow_population_by_field_name

是否允許通過(guò)字段名稱填充數(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

使用枚舉值而不是枚舉實(shí)例。

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

分配新值時(shí)驗(yàn)證字段。

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

user = User(age=25)
user.age = 30
# user.age = -5  # 將拋出驗(yàn)證錯(cuò)誤,因?yàn)閍ge必須是正整數(shù)
print(user.age)  # 輸出: 30

14. error_msg_templates

自定義錯(cuò)誤消息模板。

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

# user = User(age=-5)  # 將拋出驗(yàn)證錯(cuò)誤: 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對(duì)象填充數(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ù),用于自動(dòng)生成字段別名。

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模式定義,可以是字典或返回字典的可調(diào)用對(duì)象。

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

是否在模型驗(yàn)證時(shí)復(fù)制繼承的模型。

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

是否在嘗試轉(zhuǎn)換前檢查所有允許的類型。

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類的各個(gè)參數(shù)及其用法。

總結(jié)

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

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

相關(guān)文章

  • TensorFlow繪制loss/accuracy曲線的實(shí)例

    TensorFlow繪制loss/accuracy曲線的實(shí)例

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

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

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

    使用PyWeChatSpy自動(dòng)回復(fù)微信拍一拍功能的實(shí)現(xiàn)代碼

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

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

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

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

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

    深入分析python數(shù)據(jù)挖掘 Json結(jié)構(gòu)分析

    這篇文章通過(guò)實(shí)例給大家分析總結(jié)了python數(shù)據(jù)挖掘以及Json結(jié)構(gòu)分析的相關(guān)知識(shí)點(diǎn),對(duì)此有興趣的朋友參考下。
    2018-04-04
  • Jupyter notebook無(wú)法導(dǎo)入第三方模塊的解決方式

    Jupyter notebook無(wú)法導(dǎo)入第三方模塊的解決方式

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

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

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

    如何使用celery進(jìn)行異步處理和定時(shí)任務(wù)(django)

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

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

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

最新評(píng)論