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)

posted @ 2021-12-03 14:34  darling331  阅读(994)  评论(0编辑  收藏  举报