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内置了解码模块 会解码成原始路径

 

posted @ 2021-05-27 11:14  苦行僧冬*婷  阅读(771)  评论(0)    收藏  举报