FastApi快速构建一个web项目
迪丽瓦拉
2025-06-01 20:10:43
0次

FastApi快速构建一个web项目

在这里插入图片描述
已经使用FastApi很久了。这个一个非常优秀的框架。和flask一样能够快速构建一个web服务。开发效率非常之高。今天我一个Demo来介绍一下这个框架的使用。供大家学习参考。

项目介绍

本项目主要介绍fastapi快速编写web服务,通过案例分别介绍项目搭建,接口编写,文档生成,模板渲染,excel读取,镜像部署等项目中常见的问题。

项目目录构成

datalearning.xlsx
templatesindex.html
main.py
Dockerfile
README.md
requirements.txt

data 目录是存放Excel数据文件

templates 目录是存放html模板文件

main.py 是项目的入口文件

Dockerfile 是项目通过Docker部署构建镜像的文件

README.md 是项目的介绍文件

requirements.txt 是项目的依赖文件

项目内容

数据文件内容

数据文件内容见下图
data/learning.xlsx
在这里插入图片描述

模板渲染

见代码
templates/index.html


编程语言学习Demo

编程语言学习

注意:这是一个学习的Demo
{% for my_dict in info %}{% endfor %}
语言学习目标学习地址
{{my_dict.语言|replace('nan','')}}{{my_dict.学习目标|replace('nan','')}}{my_dict.URL|e}}" target="_blank">{{my_dict.学习地址|replace('nan','')}}

python代码

# 在视图函数中传入request对象,用于在模板对象中传递上下文(同时接收路径参数info,将其传递到上下文中)
@app.get("/", summary="这是一个模板渲染示例")
async def index(request: Request):# 加载excel数据result = pd.read_excel(file_path)# 将excel数据转化为JSON对象info = result.to_dict("records")# 返回一个模板对象,同时使用上下文中的数据对模板进行渲染return templates.TemplateResponse(name="index.html", context={"request": request, "info": info})

同步接口

见代码

@app.get("/index", summary="这是一个同步接口")
def index():return {"key": "这是一个同步接口返回的数据"}

异步接口

见代码

@app.get("/index/async", summary="这是一个异步接口")
def index_async():return {"key": "这是一个异步接口返回的数据"}

项目入口文件

见代码
main.py

import os
from pathlib import Pathimport pandas as pd
import uvicorn
from fastapi import FastAPI# 导入Request上下文对象,用来在前后台之间传递参数
from starlette.requests import Request# 导入jinja2模板引擎对象,用于后续使用
from starlette.templating import Jinja2Templatesapp = FastAPI()# 实例化一个模板引擎对象,指定模板所在路径
templates = Jinja2Templates(directory="templates")
data_path = os.path.abspath(Path("data"))
# 获取文件路径
file_path = os.path.join(data_path, "learning.xlsx")# 在视图函数中传入request对象,用于在模板对象中传递上下文(同时接收路径参数info,将其传递到上下文中)
@app.get("/", summary="这是一个模板渲染示例")
async def index(request: Request):# 加载excel数据result = pd.read_excel(file_path)# 将excel数据转化为JSON对象info = result.to_dict("records")# 返回一个模板对象,同时使用上下文中的数据对模板进行渲染return templates.TemplateResponse(name="index.html", context={"request": request, "info": info})@app.get("/index/async", summary="这是一个异步接口")
def index_async():return {"key": "这是一个异步接口返回的数据"}@app.get("/index", summary="这是一个同步接口")
def index():return {"key": "这是一个同步接口返回的数据"}if __name__ == "__main__":# 启动程序uvicorn.run(app="main:app", host="0.0.0.0", port=8000, reload=True)

项目依赖

requirements.txt

fastapi==0.94.1 
uvicorn==0.21.0
jinja2==3.1.2
pandas==1.5.3
openpyxl==3.1.2
gunicorn==20.1.0

项目部署

项目构建文件
Dockerfile

FROM  python:3.8.16-slim-buster 
LABEL MAINTAINER Li-boss "CSDN Li-boss"
COPY ./ /var/demo
RUN pip install -r /var/demo/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
WORKDIR /var/demo
EXPOSE 8000
CMD gunicorn main:app  -b 0.0.0.0:8000 --forwarded-allow-ips='*' -w 4 -k uvicorn.workers.UvicornWorker

进入到Dockerfile所在的目录,执行下面的命令构建镜像.

docker build test_demo:v1 .

启动容器

docker run -it -p 8000:8000 test_demo:v1 

访问地址

http://localhost:8000/
# 文档地址:
http://localhost:8000/docs
http://localhost:8000/redoc

访问效果

文档效果一
在这里插入图片描述

文档效果二
在这里插入图片描述

模板渲染效果一

在这里插入图片描述
希望对大家有帮助
源码下载地址

相关内容

热门资讯

辽宁朝阳文旅赴京,邀请北京游客... 10月3日,正值国庆黄金周出游热潮高涨之际,辽宁省朝阳市文化旅游和广播电视局携全域优质文旅资源、特色...
“千万年薪招聘NPC”冲上热搜... 山西晋城司徒小镇豪掷3000万,计划招聘百名NPC(非玩家角色),最高开出千万年薪,凭借短视频热度未...
1390岁的塔长啥样?主播带你... 现代快报讯(记者 姜振军)“屏幕前的朋友们大家好,我是果果!”“大家好,我是提子!”10月4日下午,...
江苏淮安:老厂房变身国庆文旅新...   国庆期间,江苏省淮安市清江浦区红旗纸箱厂老厂房经改造,成为复古工业主题沉浸式互动剧场,上演沉浸式...
临港国庆享盛景 藏蓝护航假日游 国庆长假,临港地区文旅盛宴轮番上演,海昌海洋公园、耀雪冰雪世界、滴水湖烟花秀、国风嘉年华、上海天文馆...
国庆黄金周过半!成都市郫都区文... 封面新闻记者 秦怡10月4日,国庆黄金周进入“下半程”。封面新闻记者从成都市郫都区文体旅局了解到,今...
约满,限流!全国多处景区发布公... 来源:应急管理部今天是国庆假期第4天假期过半你在哪里耍?不少热门景区人潮涌动开启“人从众”模式四川、...
年轻态里玩转“电影+”,“星海... 海边草坪变身露天影院,市集、懒人沙发、海风交织成浪漫的观影记忆。10月1日至3日,“星海拾光·电影奇...
“演唱会+潮玩休闲” 来成都凤... 封面新闻记者 赖芳杰这个国庆,成都城北的氛围感被凤凰山体育公园拉满!10月3日,李健「万物安生时」巡...
人潮涌动服务不减!国庆济野以暖... 齐鲁网·闪电新闻10月4日讯(山东广播电视台记者 房华 于宁)金秋迎华诞,欢乐赴山野。国庆黄金周期间...