使用条件创建Python数据模型

发布于 2025-02-11 05:54:36 字数 589 浏览 1 评论 0原文

如何使用条件创建 pydantic模型

我有一个pydantic模型。当以此模型为基础新课程时,它运行良好。我遇到的问题是,

  • baseuser.username应该有
    • 32个字符的最大
    • 最低长度 6个字符。
  • baseuser.password要固定为64个字符。不少,不多。

这是我可以通过数据型实现的吗?

>我知道我可以用简单的“如果”语句做到这一点,但是我希望它是pydantic模型中的数据类型。

from pydantic import BaseModel

class BaseUser(BaseModel):
    id: int
    username: str
    password: str
谢谢。

How do I create pydantic model with conditions?

I have a pydantic model. It works well when declaring new class with this model as base. The problem I have is, the

  • BaseUser.username should have
    • maxlength of 32 chars
    • minlength of 6 chars.
  • BaseUser.password to be fixed to 64 chars. Not less, not more.

Is that any way that I can achieve it through datatypes?

> I know that I can do it with simple "if" statements, but I want it to be a datatype in pydantic model.

from pydantic import BaseModel

class BaseUser(BaseModel):
    id: int
    username: str
    password: str
Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

那伤。 2025-02-18 05:54:36

您是否考虑过使用“ nofollow noreferrer”> contrast类型

from pydantic import BaseModel, constr

class BaseUser(BaseModel):
    id: int
    username: constr(min_length=6, max_length=32)
    password: constr(min_length=64, max_length=64)

样本输出

>>> user = BaseUser(id='1', username='foo', password='4m*PbpA!*A2XUdvU@u0WTvvFRyNSMcndVm6@NkZwJR1afBb@G1i5*1vvh9z*g8xw'

ValidationError: 1 validation error for BaseUser
username
  ensure this value has at least 6 characters (type=value_error.any_str.min_length; limit_value=6)


>> user = BaseUser(id='1', username='foobar', password='4m*PbpA!*A2XU')

ValidationError: 1 validation error for BaseUser
password
  ensure this value has at least 64 characters (type=value_error.any_str.min_length; limit_value=64)

>>> user = BaseUser(id='1', username='foobar', password='4m*PbpA!*A2XUdvU@u0WTvvFRyNSMcndVm6@NkZwJR1afBb@G1i5*1vvh9z*g8xw')

>>> user.dict()
>>> 
{'id': 1,
 'username': 'foobar',
 'password': '4m*PbpA!*A2XUdvU@u0WTvvFRyNSMcndVm6@NkZwJR1afBb@G1i5*1vvh9z*g8xw'}

只是一个抬头:我以前从未使用过Pydantic。因此,可以有更好的方法来解决这个问题。

Have you considered using Contraint types?

from pydantic import BaseModel, constr

class BaseUser(BaseModel):
    id: int
    username: constr(min_length=6, max_length=32)
    password: constr(min_length=64, max_length=64)

Sample output

>>> user = BaseUser(id='1', username='foo', password='4m*PbpA!*A2XUdvU@u0WTvvFRyNSMcndVm6@NkZwJR1afBb@G1i5*1vvh9z*g8xw'

ValidationError: 1 validation error for BaseUser
username
  ensure this value has at least 6 characters (type=value_error.any_str.min_length; limit_value=6)


>> user = BaseUser(id='1', username='foobar', password='4m*PbpA!*A2XU')

ValidationError: 1 validation error for BaseUser
password
  ensure this value has at least 64 characters (type=value_error.any_str.min_length; limit_value=64)

>>> user = BaseUser(id='1', username='foobar', password='4m*PbpA!*A2XUdvU@u0WTvvFRyNSMcndVm6@NkZwJR1afBb@G1i5*1vvh9z*g8xw')

>>> user.dict()
>>> 
{'id': 1,
 'username': 'foobar',
 'password': '4m*PbpA!*A2XUdvU@u0WTvvFRyNSMcndVm6@NkZwJR1afBb@G1i5*1vvh9z*g8xw'}

Just a heads-up: I have never used Pydantic before. So, there could be a better way to solve this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文