安装模块
pip install fastapi
from fastapi import FastAPI
app = FastAPI()
@app.get()
async def index():
return ok
from fastapi.staticfiles import StaticFiles
static = StaticFiles(directory='./statics') # 静态文件目录名称可以直接写‘statics’
app.mount('/static',static,name='') # 第一个参数是访问静态文件的uri,name的作用是方便反向解析
from fastapi.templating import Jinja2Templates
template=Jinja2Templates(directory='./templates') # 存放模板的目录
# JinJa2模板引擎 渲染时调用
template.TemplateResponse('模板文件.html',context={
'request':request,***})
# 当后端渲染时,必须返回前端request对象,以及其他参数,可以是python对象
# 在html页面模板中,可以使用 {
{ python对象 }} 渲染,例如 context={'request':request,'name':'test'}
# 想要渲染出name的值,只需要 {
{ name }},即可在浏览器中显示name对应的值’test‘
# JinJa2模板引擎还提供了for循环、if判断等方法
# example context={'request':request,'a':[1,2,3,4]}
{
% for i in a %}
<li>{
{
i }}</li>
{
% endfor %}
{
% for i in a %}
{
% if i<2 %}
<li>{
{
i }}</li>
{
% else %}
<li>{
{
i+1 }}</li>
{
% endif %}
{
% endfor %}
from fastapi import FastAPI,Path
app = FastAPI()
@app.get('/{id}')
async def func1(id:int): # id就是路径参数,设置了类型校验
pass
@app.get('/test/{id}')
async def func2(id:int=Path(...,ge=1)): # Path是路径参数的类,可以做验证,即对路径参数的校验
pass
Path( # noqa: N802
default: Any, # None为非必传参数,...为必传,指定值为默认
*, # 如果传了*,则说明后面的参数全部为关键字参数
alias: str = None, # 别名,至前端传参时的参数名
title: str = None, # 说明
description: str = None,
gt: float = None, # 只对int/float格式的参数,gt:大于
ge: float = None, # ge :大于等于
lt: float = None, # lt :小于
le: float = None, # le:小于等于
min_length: int = None, # 只能用于str格式的参数,最小长度
max_length: int = None, # 只能用于str格式的参数,最大长度
regex: str = None, # 只能用于str格式的参数,正则
deprecated: bool = None,
**extra: Any,
)
from fastapi import FastAPI,Query
app = FastAPI()
@app.get('/')
async def func1(a:str,b:int): # 直接定义要接收的参数,只能校验类型
pass
@app.get('/1')
async def func2(a:str=Query(),b:int=Query()): # 可以校验类型以及其他的参数,与Path类似
pass
from fastapi import Form,UploadFile
from typing import List
app = FastAPI()
@app.post('/index/dc')
async def index_post(request: Request, file1: bytes = File(...), name: str = Form(None), age: int = Form(None)):
print(name)
return name, age
# 或者使用UploadFile进行校验
@app.post('/index/dc')
async def index_post(request: Request, file1: UploadFile = File(...), name: str = Form(None), age: int = Form(None)):
print(name)
return name, age
想要使用表单,必须先安装python-multipart 模块
<form action="./index/dc" method="post" enctype="multipart/form-data">
<input type="file" name="file1">
<input type="text" name="name">