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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM