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>