phonenumbers 与 国内电话号码校验
1、phonenumbers的使用在Python中,phonenumbers 库是一个非常流行的库,用于解析、格式化、存储和验证国际电话号码。而 pydantic 是一个数据解析和验证库,它基于Python类型提示,使得数据验证变得简单且类型安全。将 phonenumbers 与 pydantic 结合使用,可以在模型验证中包括电话号码的验证。
下面是如何在 pydantic 模型中使用 phonenumbers 来验证电话号码的一个示例。
首先,你需要安装必要的库(如果你还没有安装它们的话):
1pip install phonenumbers pydantic
然后,可以创建一个自定义的验证器,该验证器使用 phonenumbers 来检查电话号码是否有效,并将其集成到 pydantic 模型中。
12345678910111213141516171819202122232425262728293031323334from typing import Optional from pydantic import BaseModel, ValidationError, valida ...
FastAPI项目 ruff配置规则
一个ruff配置,去除了部分关系不大的检查项目,以及单元测试代码因有些特殊性,也需要过滤掉部分检测项目。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172[tool.ruff]line-length = 100show-fixes = true[tool.ruff.format]docstring-code-format = truedocstring-code-line-length = 60[tool.ruff.lint]# rules: https://docs.astral.sh/ruff/rules/select = [ "E", # pycodestyle error "W", # pycodestyle warning "F", # pyflake ...
Pre-commit 配置案例
定义一个常用的Python项目Pre commit配置文件,配置了ruff作为代码格式检查工具。注意两个local插件,language 需要设置为 system,才能运行本地shell命令。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192default_language_version: python: python3.11default_install_hook_types: [pre-commit, pre-push, commit-msg]default_stages: [commit]exclude: | (?x)^( backend/.vscode/ )repos: - repo: https://github.com/pre-commit/pr ...
Pre-commit 入门
Pre-commit 是一个非常有用的工具,它可以用于在提交代码之前运行一些钩子脚本,以确保代码的质量和一致性。在本文中,我们将介绍如何使用 Pre-commit 来管理 Python 项目的代码质量。
1. 安装 Pre-commit首先,需要在计算机上安装 Pre-commit。使用 pip 安装 Pre-commit:
1pip install pre-commit
2. 创建配置文件在项目的根目录下,创建一个名为 .pre-commit-config.yaml 的文件。这个文件将用于配置 Pre-commit 钩子。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152repos:- repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.0.1 hooks: - id: check-json # 检查JSON文件的格式是否正确。 - id: ch ...
SQLModel中如何定义表的字符集等元数据
在使用SQLModel进行数据库定义的时候,经常需要指定一些表定义的元数据。可以采用如下基础模型:
1234567891011121314class TableBase(SQLModel, metaclass=DescriptionMeta): """ 数据库表公共属性模型定义 """ __table_args__ = { "mysql_engine": "InnoDB", # MySQL引擎 "mysql_charset": "utf8mb4", # 设置表的字符集 "mysql_collate": "utf8mb4_general_ci", # 设置表的校对集 } # 类名转表名 # https://blog.csdn.net/mouday/article/details/90079956 @decla ...
SQLModel中将description转化为数据表定义中的comment
在使用 SQLModel 进行模型定义的时候,使用 description 属性来定义一个 Field 的描述信息。不过在数据库中,用的是 comment。SQLModel 在生成建表语句的时候,默认不会生成 comment 信息,需要使用 sa_column_kwargs={“comment”: “字段说明信息”} 来单独定义 comment,这样会在一个字段的定义上有两个重复的定义。在 https://github.com/tiangolo/sqlmodel/issues/492 这个 issue 中有人写了一个转换程序,摘抄如下:
1234567891011121314151617181920212223242526272829303132# Automatically set comment to Column using description.# https://github.com/tiangolo/sqlmodel/issues/492class DescriptionMeta(SQLModelMetaclass): """ ...
SQLModel时间戳字段的使用
在表定义中,经常需要使用createtime、updatetime两个字段,在SQLModel中,可以定义这样一个数据模型:
1234567891011121314151617181920class TimestampModel(SQLModel): """ 时间公共字段模型定义 """ create_time: datetime = Field( default_factory=partial(datetime.now, UTC), nullable=False, description="创建时间", sa_column_kwargs={ "server_default": text("CURRENT_TIMESTAMP") } ) update_time: datetime = Field( default_fac ...
FastAPI统一异常处理
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192# -*- coding: utf-8 -*-import loggingfrom starlette.exceptions import HTTPExceptionfrom fastapi import FastAPI, Request, statusfrom fastapi.encoders import jsonable_encoderfrom fastapi.exceptions import RequestValidationErrorfrom app.extensions.fastapi.api import ApiResponselogger = logging.getLogger(__name__)error_message ...
python asyncio
asyncio 概述asyncio 是 Python 3.4 之后引入的一个标准库,用于编写单线程并发网络代码。它使用事件循环(event loop)来管理 I/O 操作,从而避免了传统的多线程或多进程带来的复杂性和性能开销。asyncio 的主要特点是它支持异步 I/O 操作、任务(task)调度和协程(coroutine)。
asyncio 原理性解析1 事件循环
事件循环是 asyncio 的核心,它负责监听 I/O 事件、执行回调函数以及调度协程。事件循环通常通过 asyncio.get_event_loop() 获取,并使用 run_until_complete() 或 create_task() 来执行协程。但通常我们使用 asyncio.run() 来启动最顶层的协程,并自动创建和关闭事件循环。
1234567import asyncioasync def main(): loop = asyncio.get_running_loop() print(loop)asyncio.run(main())
2 协程
协程是一种轻量级的 ...
Python依赖和包管理工具Poetry
Poetry 是一个现代的Python包管理工具,它解决了很多传统工具如 pip 和 virtualenv 组合使用时遇到的问题,同时还集成了包的依赖管理和发布功能。
为什么使用 Poetry
依赖管理和版本控制:Poetry 自动处理项目的依赖关系,并确保解决方案的一致性。它通过 pyproject.toml 和 poetry.lock 文件精确控制依赖版本,避免了依赖地狱。
简化虚拟环境管理:Poetry 自动创建和管理虚拟环境,无需手动使用 virtualenv。这意味着每个项目都有自己独立的环境,从而避免了包版本冲突。
一体化工作流:从创建项目、添加依赖、安装依赖到打包和发布,Poetry 提供了一套一致的命令接口,简化了工作流程。
便于项目协作:通过将 pyproject.toml 和 poetry.lock 文件加入版本控制,团队成员可以确保在不同的开发环境中使用完全相同的依赖,从而减少“在我机器上能运行”这类问题。
安装 Poetry首先,需要安装 Poetry。官方推荐的安装方式是使用其安装脚本,以确保安装最新版本:
1curl -sSL https://raw.gi ...