fastai个人学习笔记
一、模块化结构框架
设置了默认请求头shop之后就无需再app0x里接口函数前全部写上/shop/xxx,或者/user/xxx,他会同意添加~如果都写了就会出现以下的情况(重复shop):
二、请求与响应
关于参数:
常见的请求参数类型包括:
- 查询参数(Query Parameters):
以键值对形式附加在 URL 末尾,用于过滤、排序或限制请求结果。
- 路径参数(Path Parameters):
URL 中,用作资源的唯一标识或区分资源间的细微差异。
- 请求体参数(Body Parameters):
包含在请求体中,传递复杂或大量数据,如表格数据或 JSON 对象。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/m0_60166861/article/details/142456766
2.1 路径参数
路径传送给路由函数的变量都是字符串,同时观察到,return的数据也可以以列表的形式return回来。
如果强制设置传入的参数的类型,可以在变量接收后传入函数参数时进行类型转换(id:int)
(1)指定多个数据类型的时候,使用union关键字
(2)type hints 主要是要指示函数的输入和输出的数据类型,数据类型在typing 包中,基本类型有str list dict等等Union 是当有多种可能的数据类型时使用,比如函数有可能根据不同情况有时返回str或返回list,那么就可以写成Union[list,str],Optional 是Union的一个简化,当数据类型中有可能是None时,比如有可能是str也有可能是None,则Optional[str], 相当于Union[str, None]
当路径参数存在,应该在函数的参数上接收同名变量!即存在一个{},设置接口函数就应该有花括号内的参数作为函数参数!
使用表单接收参数
有路径参数才能有同名变量
另一个需要注意的点:在做 路由匹配的时候回根据设置请求函数代码的顺序从上到下匹配请求
因为/user/1符合第一条路径接口函数就自动执行了,不会匹配/user/{id}当id=1的内容:
2.2、查询参数(请求参数)
路径函数中声明 不属于路径参数的其他函数参数时,它们将被自动解释为"查询字符串"参数,就是 url中? 之后用$分割的 key-value键值对
post请求也有查询参数。
2.2.1 设置参数模型:
1. Field包:指定参数范围。
def Field( default: Any = Undefined 大,
default_factory:0ptional[NoArgAnyCallable]= None, #默认值
alias:str = None,
title: str = None,
description:str =None, #详细描述
exclude:> Union[‘AbstractSetIntStr’‘MappingIntStrAny’,Any]= None
include:> Union[‘AbstractSetIntStr’MappingIntStrAny’, Any]=None,
const: bool => None
gt:float = None,#大于
ge: float = None
lt#小于
regex #正则表达式
gt是大于lt是小于,以下age的定义是age定义区域在1~100之间默认值是0
2. 校验规则:还可以设置校验函数
通过装饰器进行限定,函数参数中cls、v分别代表,传入的传入的对象是类别对象不是实例对象,v是指当前传入的参数。
使用isalpha()函数说明的传入的变量是检查v检查字符串是否只包含字母字符,并且改校验函数必须要记得return原来的值v:
assert关键字不知道如何使用可以查看文末:## python查漏补缺 1.assert关键字
List[int]:指定list中只能存int类型的数据,在注入的时候会自动做类型转换。
当直接返回一个对象的时候,fastapi会自动将对象进行序列化
不同的basemodel数据模型可以嵌套使用。
python查漏补缺
1.assert关键字
此语句接受一个布尔条件作为输入,当返回True时,不做任何事情并继续正常的执行流程,但如果计算结果为False,则引发AssertionError。
带有error_message参数的assert:
a = 4
b = 0
# using assert to check for 0
print("The value of a / b is : ")
assert b != 0, "Zero Division Error"
print(a / b)
输出:
AssertionError: Zero Division Error
应用例子: