fastapi(一)--初识

hello world

from fastapi import FastAPI
import uvicorn


app = FastAPI()


@app.get('/')
async def index():
    return "bruce"


if __name__ == "__main__":
    uvicorn.run(app, host="127.0.0.1", port=8001)


# uvicorn 01_hello_world_demo.py:app --reload

使用模板
安装依赖

  • jinja2
  • aiofiles(静态文件)

模板使用方法

from starlette.requests import Request
from fastapi import FastAPI
from starlette.templating import Jinja2Templates
import uvicorn

app = FastAPI()
templates = Jinja2Templates(directory='templates')


@app.get("/")
async def main(request: Request):
    return templates.TemplateResponse('index.html', {'request': request, 'hello': 'hi...'})


if __name__ == '__main__':
    uvicorn.run(app, host="127.0.0.1", port=8001)
<body>
    <h1>Hello FastApi</h1>
    <h2>{{ hello }}</h2>
</body>

传递参数

from starlette.requests import Request
from fastapi import FastAPI
from starlette.templating import Jinja2Templates
import uvicorn

app = FastAPI()
templates = Jinja2Templates(directory='templates')


@app.get("/")
async def index(request: Request):
    return templates.TemplateResponse('index.html', {'request': request, 'hello': 'hi'})


@app.get("/{item_id}/")
async def main(request: Request, item_id):
    return templates.TemplateResponse('index.html', {'request': request, 'item_id': item_id})


if __name__ == '__main__':
    uvicorn.run(app, host="127.0.0.1", port=8001)

<body>
    <h1>Hello FastApi</h1>
    <h2>{{ hello }}</h2>
    <h2>{{ item_id }}</h2>
</body>

url:127.0.0.1:8001
url:127.0.0.1:8001/bruce

form表单

from starlette.requests import Request
from fastapi import FastAPI, Form
from starlette.templating import Jinja2Templates
import uvicorn

app = FastAPI()
templates = Jinja2Templates(directory='templates')


@app.post('/user/')
async def index(request: Request, username: str = Form(...), password: str = Form(...)):
    print('text_1', username)
    print('text_2', password)
    return templates.TemplateResponse('user.html', {'request': request, 'text_1': username, 'text_2': password})


@app.get('/')
async def main(request: Request):
    return templates.TemplateResponse('post.html', {'request': request})


if __name__ == '__main__':
    uvicorn.run(app, host="127.0.0.1", port=8001)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/user/" enctype="application/x-www-form-urlencoded" method="post">
    <label>username</label>
    <br>
    <input name="username" type="username">
    <br>
    <input name="password" type="password">
    <br>
    <input type="submit">
</form>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {{ text_1 }}
    {{ text_2 }}
</body>
</html>

上传文件

from typing import List
from starlette.requests import Request
from fastapi import FastAPI, File, UploadFile
from starlette.templating import Jinja2Templates
import uvicorn

app = FastAPI()
templates = Jinja2Templates(directory='templates')


@app.post("/files/")
async def files(
        request: Request,
        files_list: List[bytes] = File(...),
        files_name: List[UploadFile] = File(...)
):
    return templates.TemplateResponse(
        'files.html',
        {
            'request': request,
            'file_sizes': [len(file) for file in files_list],
            'file_names': [file.filename for file in files_name]
        })


@app.get("/")
async def index(request: Request):
    return templates.TemplateResponse('file_index.html', {'request': request})


if __name__ == '__main__':
    uvicorn.run(app, host="127.0.0.1", port=8001)

files.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div>
        <span>file_list:{{ file_sizes }}</span>
        <span>file_name:{{ file_names }}</span>
    </div>
</body>
</html>

file_index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/files/" enctype="multipart/form-data" method="post">
    <input name="files_list" type="file" multiple>
    <input name="files_name" type="file" multiple>
    <input type="submit">
</form>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值