项目开发中的版本报错requierments.txt
官方文档地址
imooc:http://imooc.com/article/304756
在 FastAPI 中,query_string 和 query_params 是两种用于处理 URL 查询参数的方法。
query_string 是原始的、未解析的查询参数字符串。例如,在 URL http://example.com/?key=value 中,query_string 就是 key=value。
query_params 是已解析的查询参数,它是一个字典,包含了所有的查询参数和它们的值。在上面的例子中,query_params 就是 {'key': 'value'}
在 Python 中,List[int] 和 list[int] 都是用来表示一个只包含整数的列表的类型注解。不过,他们来自两个不同的库,有些微小的区别。
List[int] 来自 typing 模块,这个模块在 Python 3.5 版本引入,主要用来支持更丰富的类型注解。List 是一个泛型类,你可以用它来指定列表中元素的类型,比如 List[int] 就表示一个整数列表。
list[int] 则是在 Python 3.9 版本中引入的,作为内置的 list 类的泛型版本。它的行为和 List[int] 基本上是一样的,但更符合 Python 的语法习惯。
所以,如果你的代码需要在 Python 3.9 之前的版本上运行,你应该使用 List[int],否则你可以选择使用 list[int]。需要注意的是,无论使用哪种方式,都需要确保你的代码运行在开启了类型注解的环境中。
Python 的类型注解是一种可选的特性,你可以通过以下步骤来确认你的代码是否在开启了类型注解的环境中运行:
使用 typing 模块:Python 的 typing 模块提供了一套丰富的类型系统,你可以用它来为函数参数、返回值以及变量添加类型注解。如果你的代码中使用了 typing 模块,并且没有遇到 ImportError,那么就说明你的环境支持类型注解。
运行静态类型检查器:Python 的类型注解在运行时并不会造成任何效果,它们主要是为了提供给静态类型检查器(例如 mypy、pytype 或 PyCharm)使用的。你可以尝试运行这些工具来检查你的代码,如果它们可以正常工作,那么就说明你的环境支持类型注解。
检查 Python 版本:Python 的类型注解功能在 Python 3.5 版本引入。如果你的环境中的 Python 版本低于这个版本,那么就不支持类型注解。你可以通过运行 python --version 命令来查看你的 Python 版本。
cffi=1.4.4
python 312版本
pip install 安装报错
解决方法:
1.查询 https://pypi.org/search/?q=cffi 当前最新的包版本 [我这边查询到是cffi==1.16.0]
2.修改项目下载依赖文件
requirements.txt
将 cffi=1.4.4 修改成 cffi=1.16.0[查询的最新包的版本号]
3.重新执行命令
pip install -r .\requirements.txt
4.如果之前有根据依赖文件安装过部分包,需要删除的话执行
pip uninstall -y -r .\requirements.txt
color console
**结构赋值
注意版本兼容问题
import os
1、导入HTTPException
2、raise HTTPException(status_code= , detail="",headers={"X-Error":"Error"})
return {"city":city}
app = FastAPI(
title=' ...' , #标题
description='', #描述
version='', #版本
docs_url='/docs', #docs文档地址
redoc_url='/redoc' #redoc文档地址
static挂载 app.mount('/static',app=StaticFiles(directory='./...'))
uploadFile:
上传文件,优势较大,可上传大文件,要提供下载功能
版本问题需要有版本规划
##函数顺序就是路由顺序
from fastapi import APIRouter from typing import Optional, List, Tuple, Dict from pydantic import BaseModel, EmailStr tutor04 = APIRouter() class UserBase(BaseModel): username: str email: EmailStr mobile: List[str] = [None] address: str = None full_name: Optional[str] = None class UserIn(UserBase): password: str class UserOut(UserBase): pass users = { "user01": {"username": "001", "password": "3456789", "email": '123@163.com'}, "user02": {"username": "001", "password": "3456789", "email": '123@163.com', "address": "mnnnnnnnnnnnnnn大桥"}, "user03": {"username": "001", "password": "3456789", "email": '123@163.com', "address": "mnnnnnnnnnnnnnn大桥", "full_name": "jack"}, } @tutor04.post('/04/response_model', response_model=UserOut) async def tutor04_response_model( user: UserIn ): print(users.get('user01')) return users.get('user01')
# COOKIE @tutor03.get('/033/cookie') def cookie( cookie_id: Optional[str] = Cookie(None) ): return {"cookie_id": cookie_id} # HEADERS @tutor03.get('/033/headers') def headers( user_agent: Optional[str] = Header(None, convert_underscores=True), x_token: Optional[str] = Header(None, convert_underscores=True) ): return {"user_agent": user_agent, 'x_token': x_token}
class Demo(BaseModel): name: str price: float is_offer: Union[bool, None] = None descrition: List[str] = []
赋初始值被认为是 Optional 字段,否则被认为是 Required 字段
也可以通过 Optional 明确指定
另外,如果指定了字段类型,那么通过以下方式确认字段时也是有顺序的
print(Demo.__fields__.keys())
不同包之间的版本兼容性
pytcharm可以安装pydantic 插件
copy浅拷贝
路径校验:Path
查询校验:Query
请求体字段校验:Field
导入多个不同的依赖
依赖注入
ertert
1、Uvicorn:是异步web框架服务的包。
2、搭配Gunicorn的Uvicorn可实现异步多线程的服务。
1、pydantic:数据格式化的一个库。能够定义好调用时的参数类型控制,以及返回时的序列化。
2、starlette:异步的web框架
1、引用其他包的时候,要注意版本问题,有时候版本差异会造成BUG
from jose import JWTError, jwt
如果使用的python版本比较高的话,可能不支持这种导入了。
如果发现这种导包不对,可以尝试: pip install PyJWT
然后直接 import jwt 就可以了
JWTError也不再支持,可以尝试使用 jwt 下的 异常模块