python 使用fastApi请求的几种方式
话不多说,看例子
import pymysql
import uvicorn as u
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles # 主要功能是导入静态文件类,因为我们要用到js、CSS
# import address_code #导入自己编写的模块,主要是要用到注册到主路由上面
from pydantic import BaseModel
from starlette.requests import Request # 后面会用到,请求静态资源文件要用到请求的类型
from starlette.templating import Jinja2Templates # 主要功能是导入jinjia2的模板引擎类
# templates = Jinja2Templates(directory='./templates') # 模板实例化,一会要用到
app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static") # 加载静态文件
@app.get("/") # 访问html,固定写法
async def main(request: Request):
return templates.TemplateResponse('index.html', {'request': request})
# fastapi文档地址 类似JavaSwaager
# http://127.0.0.1:8000/docs
# http://127.0.0.1:8000/redoc
# 导入别的文件到主路由上
# app.include_router(address_code.router) #将导入的address_code路由注册到主路由上
@app.get('/report')
def index():
data = get_report()
print(data)
return data
# 这里是数据库链接相关参数,demo样例,实际使用中,建议走连接池
def get_report():
# 打开数据库连接
db = pymysql.connect(host="127.0.0.1", user="root", password="123456", db="test001",
port=3306)
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# sqll = "SELECT code,totalQty FROM shipment_header WHERE warehouseCode='%s'" % ('01')
sqll = """ select (case when sex = 0 then '女' else case when sex=1 then '男' else '未知' end end) as 'name', count(*) as 'value' from t_member group by sex """
# 使用 execute() 方法执行 SQL 查询
cursor.execute(sqll)
# 使用 fetchall() 方法获取s所有数据.
datas = cursor.fetchall()
print(list(datas))
db.close()
reports = []
data = {}
for r in datas:
report = {}
report['name'] = r[0]
report['value'] = r[1]
reports.append(report)
data['code'] = 0
data['report_data'] = reports
return {'msg': '查询成功', 'code': 200, 'data': reports}
@app.get('/getUrl/{text}')
def geturl(text: str):
return {'msg': '这是get请求url参数', 'response': text}
@app.get('/getUrl')
def getUrl(text: str):
return {'msg': '这是get请求params参数', 'response': text}
@app.post('/postUrl')
def psotUrl(text: str):
return {'msg': '这里是post请求params参数', 'response': text}
class Item(BaseModel):
text: str = None
name: str = None
# post 请求body参数,body参数里,可以在后端定义实体
@app.post('/postUrls')
async def postUrls(args: Item):
return get_report()
if __name__ == '__main__':
u.run('test007:app', host="0.0.0.0", port=8000, reload=True)
惜秦皇汉武,略输文采;唐宗宋祖,稍逊风骚。
一代天骄,成吉思汗,只识弯弓射大雕。
俱往矣,数风流人物,还看今朝