FastAPI框架之创建run启动文件
项目目录:

tutorial包下的init文件 .表示当前目录
from .chapter03 import app03 from .chapter04 import app04 from .chapter05 import app05
chapter03下创建新的app
from fastapi import APIRouter app03 = APIRouter()
项目启动文件 run.py
""" 项目启动文件,类似于uvicorn xx:app --reload """ import uvicorn from fastapi import FastAPI from tutorial import app04, app03, app05 app = FastAPI() # fastapi实例化对象
# include_router 类似django中的include路由分发,prefix 表示访问的url tags表示每个app的名称 app.include_router(app03, prefix='/chapter03', tags=['第三章 请求参数和验证']) app.include_router(app04, prefix='/chapter04', tags=['第四章 响应处理和FastAPI配置']) app.include_router(app05, prefix='/chapter05', tags=['第五章 FastAPI的依赖注入']) if __name__ == '__main__': uvicorn.run('run:app', host='0.0.0.0', port=8000, reload=True, debug=True, workers=1)
注意: 在fastapi中 函数的顺序就是请求过来走的路由的顺序
@app03.get('/path/{parameters}') # 函数顺序就是路由顺序 #第一步 async def path_parameters02(parameters: str): return {'message': parameters} @app03.get('/path/parameters') #第2步 async def path_parameters01(): return {'message': 'this is a message'}
当现在的顺序时: 当你访问 http://127.0.0.1:8000/chapter03/path/parameters 时 返回{"message":"parameters"}
先第二步,再第一步
当你访问 http://127.0.0.1:8000/chapter03/path/parameters 时 返回
{"message":"this is a message"}
所以说顺序很重要
枚举类型
# 枚举类型
from enum import Enum
class CityName(str, Enum): BeiJing = 'Beijing China' ShangHai = 'ShangHai China' @app03.get('/enum/{city}') async def enum(city: CityName): if city == CityName.BeiJing: return {'city_name': city, 'confirmed': 1024, 'death': 17} if city == CityName.ShangHai: return {'city_name': city, 'confirmed': 255, 'death': 6} return {'city_name': city, 'latest': 'unknow'}
访问路径:
http://127.0.0.1:8000/chapter03/enum/Beijing%20China
路径传递
@app03.get('/files/{file_path: path}') async def filepath(file_path: str): return {'message': f'this is a path {file_path}'} # python3.6以上传递字符串的方式
url编码问题
请求路径 /customer/?page=3&name='dong'&kw='111' request.GET QueryDict数据类型 开始对数据进行封装了,一个字节一个字节的读 当读到?号时 知道了后面是参数 当读到第一个等号时 request.GET['page'] =3 当读到第二个等号时 request.GET['name'] ='dong' 封装起来 想要取到全部路径 q=QueryDict() q['next'] =/customer/?page=3&name='dong'&kw=111 q.urlencode() 编码原理 会把不安全字符 替换成16进制ascii码值 例如 =替换%3D &替换%26 ?替换%3F /替换成%2F 空格 %20 django WSGI,request内置了解码模块 会解码成原始路径

浙公网安备 33010602011771号