最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Pydantic中BaseConfig的具體使用

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

概述

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

官方文檔鏈接

Pydantic官方文檔 - BaseConfig

基礎(chǔ)功能

基本配置

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字段的前后空白,并設(shè)置了字符串的最小和最大長度。

進階功能

自定義驗證器

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

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

將所有字符串轉(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

字符串的最小長度。

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"  # 將拋出驗證錯誤,因為模型是凍結(jié)的
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模式定義,可以是字典或返回字典的可調(diào)用對象。

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

是否在嘗試轉(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類的各個參數(shù)及其用法。

總結(jié)

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

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

相關(guān)文章

  • Python AI入門學習:從Hello World到線性回歸、神經(jīng)網(wǎng)絡、圖像分類

    Python AI入門學習:從Hello World到線性回歸、神經(jīng)網(wǎng)絡、圖像分類

    作為一個Rust開發(fā)者,我發(fā)現(xiàn)Python AI的學習過程既有挑戰(zhàn)也有機遇,挑戰(zhàn)在于Python的動態(tài)類型和內(nèi)存管理與Rust有很大不同,需要適應新的思維方式,機遇在于Python的AI生態(tài)系統(tǒng)非常豐富,開發(fā)效率高,能夠快速實現(xiàn)AI模型
    2026-03-03
  • python基于機器學習預測股票交易信號

    python基于機器學習預測股票交易信號

    近年來,隨著技術(shù)的發(fā)展,機器學習和深度學習在金融資產(chǎn)量化研究上的應用越來越廣泛和深入。目前,大量數(shù)據(jù)科學家在Kaggle網(wǎng)站上發(fā)布了使用機器學習/深度學習模型對股票、期貨、比特幣等金融資產(chǎn)做預測和分析的文章。本文就來看看如何用python預測股票交易信號
    2021-05-05
  • Pandas實現(xiàn)復制dataframe中的每一行

    Pandas實現(xiàn)復制dataframe中的每一行

    這篇文章主要介紹了Pandas實現(xiàn)復制dataframe中的每一行方式,
    2024-02-02
  • python安裝/卸載模塊方法步驟詳解(附詳細圖解)

    python安裝/卸載模塊方法步驟詳解(附詳細圖解)

    在日常工作中會需要安裝或者卸載Python模塊.于是我整理了一下,下面這篇文章主要給大家介紹了關(guān)于python安裝/卸載模塊的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • Python結(jié)合ffmpeg 實現(xiàn)單線程和多線程推流

    Python結(jié)合ffmpeg 實現(xiàn)單線程和多線程推流

    本文主要介紹了Python結(jié)合ffmpeg 實現(xiàn)單線程和多線程推流,將通過兩個不同的實現(xiàn)方式,即單線程推流和多線程推流,來展示如何利用?cv2(OpenCV)和?subprocess?等庫將視頻幀推送到指定的 RTMP 地址,感興趣的可以了解一下
    2025-06-06
  • DjangoRestFramework 使用 simpleJWT 登陸認證完整記錄

    DjangoRestFramework 使用 simpleJWT 登陸認證完整記錄

    Djangorestframework-simplejwt是Django REST Framework框架的一個jwt插件,使用 python http 工具進行接口測試的方法文中給大家提到,重點給大家分享djangorestframework-simplejwt 使用記錄及登陸認證的完成過程,感興趣的朋友跟隨小編一起看看吧
    2021-06-06
  • Python django導出excel詳解

    Python django導出excel詳解

    這篇文章主要介紹了Python django導出excel的方法 ,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2021-11-11
  • Python 程序員必須掌握的日志記錄

    Python 程序員必須掌握的日志記錄

    這篇文章主要介紹了Python 日志的相關(guān)資料,幫助大家更好的理解和學習python,感興趣的朋友可以了解下
    2020-08-08
  • Python打印數(shù)據(jù)類型的全過程

    Python打印數(shù)據(jù)類型的全過程

    這篇文章主要介紹了Python打印數(shù)據(jù)類型的全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python使用Matplotlib畫餅圖

    python使用Matplotlib畫餅圖

    這篇文章主要介紹了python使用Matplotlib畫餅圖,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09

最新評論

饶平县| 永川市| 甘德县| 常宁市| 铜梁县| 达州市| 廊坊市| 和田市| 中卫市| 元江| 平乡县| 宣威市| 延川县| 青海省| 白河县| 南开区| 巴塘县| 墨玉县| 苍南县| 玉屏| 上蔡县| 江西省| 哈尔滨市| 儋州市| 武清区| 天祝| 西吉县| 漾濞| 武清区| 宁河县| 固安县| 建昌县| 宜兴市| 鹤峰县| 周宁县| 鸡西市| 广昌县| 阳泉市| 儋州市| 庆元县| 福建省|