当前位置: 首页 > news >正文

安卓手机开发者模式seo营销策略

安卓手机开发者模式,seo营销策略,代购网站怎么做的,上海网站建设怎么弄1. 简介 pydantic 库是一种常用的用于数据接口 schema 定义与检查的库。 通过 pydantic 库,我们可以更为规范地定义和使用数据接口,这对于大型项目的开发将会更为友好。 当然,除了 pydantic 库之外,像是 valideer 库、marshmallo…

1. 简介

pydantic 库是一种常用的用于数据接口 schema 定义与检查的库。
通过 pydantic 库,我们可以更为规范地定义和使用数据接口,这对于大型项目的开发将会更为友好。
当然,除了 pydantic 库之外,像是 valideer 库、marshmallow 库、trafaret 库以及 cerberus 库等都可以完成相似的功能,但是相较之下,pydantic 库的执行效率会更加优秀一些。
因此,这里,我们仅针对 pydantic 库来介绍一下如何规范定义标准 schema 并使用。

安装部署

pip install pydantic

2. 使用方法

2.1. schema 基本定义

pydantic 库的数据定义方式是通过 BaseMode l类来进行定义的,所有基于pydantic的数据类型本质上都是一个BaseModel类,它最基本的使用方式如下:

from pydantic import BaseModelclass Person(BaseModel):name: str

2.2. schema 基本实例化

调用时,我们只需要对其进行实例化即可,实例化方法有以下几种:
直接传值

p = Person(name="Tom")
print(p.json()) # {"name": "Tom"}

通过字典传入

p = {"name": "Tom"}
p = Person(**p)
print(p.json()) # {"name": "Tom"}

通过其他的实例化对象传入

p2 = Person.copy(p)
print(p2.json()) # {"name": "Tom"}

2.3. 异常处理

当传入值错误的时候,pydantic就会抛出报错,例如:

Person(person="Tom")  # 定义为name,而非person

pydantic会抛出异常:

ValidationError: 1 validation errors for Person
namefield required (type=value_error.missing)

2.4. 参数过滤

另一方面,如果传入值多于定义值时,BaseModel 也会自动对其进行过滤。如:

p = Person(name="Tom", gender="man", age=24)
print(p.json()) # {"name": "Tom"}

可以看到,额外的参数 gender 与 age 都被自动过滤了。
通过这种方式,数据的传递将会更为安全,但是,同样的,这也要求我们在前期的 schema 定义中必须要尽可能地定义完全。

2.5. 阴性类型转换

此外,pydantic 在数据传输时会直接进行数据类型转换,因此,如果数据传输格式错误,但是可以通过转换变换为正确的数据类型是,数据传输也可以成功,例如:

p = Person(name=123)
print(p.json()) # {"name": "123"}

3. pydantic 数据类型

3.1. 基本数据类型

下面,我们来看一下pydantic中的一些常用的基本类型。

from pydantic import BaseModel
from typing import Dict, List, Sequence, Set, Tupleclass Demo(BaseModel):a: int # 整型b: float # 浮点型c: str # 字符串d: bool # 布尔型e: List[int] # 整型列表f: Dict[str, int] # 字典型,key为str,value为intg: Set[int] # 集合h: Tuple[str, int] # 元组

3.2. 高级数据结构

这里,我们给出一些较为复杂的数据类型的实现。

3.2.1. enum 数据类型

enum型数据类型我们可以通过enum库进行实现,给出一个例子如下:

from enum import Enumclass Gender(str, Enum):man = "man"women = "women"

3.2.2. 可选数据类型

如果一个数据类型不是必须的,可以允许用户在使用中不进行传入,则我们可以使用typing库中的Optional方法进行实现。

from typing import Optional
from pydantic import BaseModelclass Person(BaseModel):name: strage: Optional[int]

需要注意的是,设置为可选之后,数据中仍然会有age字段,但是其默认值为None,即当不传入age字段时,Person仍然可以取到age,只是其值为None。例如:

p = Person(name="Tom")
print(p.json()) # {"name": "Tom", "age": None}

3.2.3. 数据默认值

上述可选数据类型方法事实上是一种较为特殊的给予数据默认值的方法,只是给其的默认值为None。这里,我们给出一些更加一般性的给出数据默认值的方法。

from pydantic import BaseModelclass Person(BaseModel):name: strgender: str = "man"p = Person(name="Tom")
print(p.json()) # {"name": "Tom", "gender": "man"}

3.2.4. 允许多种数据类型

如果一个数据可以允许多种数据类型,我们可以通过 typing 库中的 Union 方法进行实现。

from typing import Union
from pydantic import BaseModelclass Time(BaseModel):time: Union[int, str]t = Time(time=12345)
print(t.json()) # {"time": 12345}
t = Time(time = "2020-7-29")
print(t.json()) # {"time": "2020-7-29"}

3.2.5. 异名数据传递

假设我们之前已经定义了一个schema,将其中某一个参量命名为了A,但是在后续的定义中,我们希望这个量被命名为B,要如何完成这两个不同名称参量的相互传递呢?
我们可以通过 Field 方法来实现这一操作。

from pydantic import BaseModel, Fieldclass Password(BaseModel):password: str = Field(alias = "key")

则在传入时,我们需要用key关键词来传入password变量。

p = Password(key="123456")
print(p.json()) # {"password": "123456"}

3.2.6. 多级 schema 定义

这里,我们给出一个较为复杂的基于pydantic的schema定义实现样例。

from enum import Enum
from typing import List, Union
from datetime import date
from pydantic import BaseModelclass Gender(str, Enum):man = "man"women = "women"class Person(BaseModel):name : strgender : Genderclass Department(BaseModel):name : strlead : Personcast : List[Person]class Group(BaseModel):owner: Personmember_list: List[Person] = []class Company(BaseModel):name: strowner: Union[Person, Group]regtime: datedepartment_list: List[Department] = []

需要注意的是,我们除了可以一步一步地实例化之外,如果我们已经有了一个完整的Company的内容字典,我们也可以一步到位地进行实例化。

sales_department = {"name": "sales","lead": {"name": "Sarah", "gender": "women"},"cast": [{"name": "Sarah", "gender": "women"},{"name": "Bob", "gender": "man"},{"name": "Mary", "gender": "women"}]
}research_department = {"name": "research","lead": {"name": "Allen", "gender": "man"},"cast": [{"name": "Jane", "gender": "women"},{"name": "Tim", "gender": "man"}]
}company = {"name": "Fantasy","owner": {"name": "Victor", "gender": "man"},"regtime": "2020-7-23","department_list": [sales_department,research_department]
}company = Company(**company)

3.3. 数据检查

pydantic 本身提供了上述基本类型的数据检查方法,但是,除此之外,我们也可以使用 validator 和 config 方法来实现更为复杂的数据类型定义以及检查。

3.3.1. validator用法

使用validator方法,我们可以对数据进行更为复杂的数据检查。

import re
from pydantic import BaseModel, validatorclass Password(BaseModel):password: str@validator("password")def password_rule(cls, password):def is_valid(password):if len(password) < 6 or len(password) > 20:return Falseif not re.search("[a-z]", password):return Falseif not re.search("[A-Z]", password):return Falseif not re.search("\d", password):return Falsereturn Trueif not is_valid(password):raise ValueError("password is invalid")

通过这种方式,我们就可以额外对密码类进行格式要求,对其字符数以及内部字符进行要求。

3.3.2. Config 方法

如果要对BaseModel中的某一基本型进行统一的格式要求,我们还可以使用Config方法来实现。

from pydantic import BaseModelclass Password(BaseModel):password: strclass Config:min_anystr_length = 6 # 令Password类中所有的字符串长度均要不少于6max_anystr_length = 20 # 令Password类中所有的字符串长度均要不大于20

4. 模型属性

dict() 模型字段和值的字典
json() JSON 字符串表示dict()
copy() 模型的副本(默认为浅表副本)
parse_obj() 使用dict解析数据
parse_raw 将str或bytes并将其解析为json,然后将结果传递给parse_obj
parse_file 文件路径,读取文件并将内容传递给parse_raw。如果content_type省略,则从文件的扩展名推断
from_orm() 从ORM 对象创建模型
schema() 返回模式的字典
schema_json() 返回该字典的 JSON 字符串表示
construct() 允许在没有验证的情况下创建模型
fields_set 初始化模型实例时设置的字段名称集
fields 模型字段的字典
config 模型的配置类

参考:
https://blog.csdn.net/codename_cys/article/details/107675748
https://www.cnblogs.com/dyl0/articles/16896330.html

http://www.shuangfujiaoyu.com/news/59997.html

相关文章:

  • 正规html5成人网站企拓客app骗局
  • 江宁网站建设要多少钱电商平台app大全
  • 企业网站建设内存长沙seo霜天
  • 新手学做网站 pdfseo黑帽技术有哪些
  • 手机网站建设策划百度网盟推广官方网站
  • 简约 时尚 高端 网站建设互联网产品营销策划方案
  • 石家庄网站推广今天刚刚最新消息2023
  • 注销网站 取消接入seo文章代写一篇多少钱
  • 自己建立公司网站的步骤怎样做搜索引擎推广
  • 安装不了wordpressseo网站优化知识
  • 请解释网站开发的主要流程全网优化推广
  • 电商网站更适合赣州seo顾问
  • 灵犀科技 网站建设每日一则小新闻
  • 支付宝网站怎么设计的江门网站建设
  • 黄河道网站建设公司百度招聘网最新招聘信息
  • BC网站开发制作产品怎样推广有效
  • 网站建设中图片广州百度推广客服电话
  • 网站团队建设爱站长尾关键词挖掘工具
  • 国防教育网站建设说明书网站关键词提升
  • 自开发网站google play下载官方版
  • 网站建设小工具百度站长平台如何添加网站
  • 网站开发项目时序图企业关键词推广
  • 专业的移动网站建设公百度seo优化多少钱
  • 域名查询注册官网seo修改器
  • 怀柔城乡建设委员会的网站站长统计 站长统计
  • 做网站推广的 什么是开户网络广告推广方式
  • 莉莉卡是哪个网站做的接推广app任务的平台
  • 如何自己编写一个程序seo是哪个国家
  • 厦门网站建设 智多星网络营销推广难做吗
  • 想兼职做网站推广长春刚刚最新消息今天