惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MyScale Blog
MyScale Blog
A
About on SuperTechFans
G
Google Developers Blog
B
Blog RSS Feed
F
Fortinet All Blogs
WordPress大学
WordPress大学
Recent Announcements
Recent Announcements
Hugging Face - Blog
Hugging Face - Blog
Y
Y Combinator Blog
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
T
The Blog of Author Tim Ferriss
Jina AI
Jina AI
IT之家
IT之家
P
Proofpoint News Feed
美团技术团队
量子位
Microsoft Azure Blog
Microsoft Azure Blog
Engineering at Meta
Engineering at Meta
B
Blog
有赞技术团队
有赞技术团队
U
Unit 42

博客园 - 全栈测试笔记

博文阅读密码验证 - 博客园 FastAPI系列(24):ORM操作之删除接口开发 单例模式管理模型客户端的几种实现方式 博文阅读密码验证 - 博客园 FastAPI系列(23):ORM操作之编辑接口开发 FastAPI系列(22):ORM之多对多查询记录 FastAPI系列(21):ORM之多对多添加记录 CC Switch配置模型 Claude Code安装 FastAPI系列(20):ORM添加表记录 博文阅读密码验证 - 博客园 FastAPI系列(18):ORM查询操作 FastAPI系列(17):ORM的迁移命令 FastAPI系列(16):ORM创建模型类 FastAPI系列(15):Jinja2模板语法之控制结构 FastAPI系列(14):Jinja2模板语法之过滤器 FastAPI系列(13):Jinja2模板介绍、模板语法之变量渲染 FastAPI系列(12):响应模型参数 【汇总】FastAPI系列教程
FastAPI系列(19):ORM响应页面数据
全栈测试笔记 · 2026-02-03 · via 博客园 - 全栈测试笔记

本系列汇总,请查看这里https://www.cnblogs.com/uncleyong/p/19503695

项目目录下创建目录templates

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"
          integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
</head>
<body>
<h1>学生信息</h1>

<div class="row">
    <div class="col-md-8 col-md-offset-2">
<!--        <p>-->
<!--            <button class="btn primary"><a href="">添加学生</a></button>-->
<!--        </p>-->

        <table class="table table-bordered table-striped table-hover">
            <thead>
            <tr>
                <th>学生学号</th>
                <th>学生姓名</th>
                <th>学生班级</th>
            </tr>
            </thead>

            <tbody>
            {% for student in students %}
                <tr>
                    <td>{{ student.sno }}</td>
                    <td>{{ student.name }}</td>
                    <td>{{ student.clas_id }}</td>
                </tr>
            {% endfor %}

            </tbody>
        </table>
    </div>
</div>


</body>
</html>

student.py

from fastapi import APIRouter
from fastapi import Request
from fastapi.templating import Jinja2Templates

from templates import templates_dir
from test_orm.models import Student

student_api = APIRouter()



@student_api.get("/index.html")
async def getAllStudent(request: Request):
    templates = Jinja2Templates(directory=templates_dir)
    # templates = Jinja2Templates("../templates")
    students = await Student.all()

    return templates.TemplateResponse(
        "index.html", {
            "request": request,
            "students": students
        }
    )

关于templates的目录,可以相对路径,也可以绝对路径

image

import os
from pathlib import Path

templates_dir = os.path.dirname(os.path.abspath(__file__))
print(templates_dir)

# 上面和下面的代码效果一样
templates_dir = Path(__file__).parent
print(templates_dir)

main.py

import uvicorn
from fastapi import FastAPI
from tortoise.contrib.fastapi import register_tortoise

from test_orm.api.student import student_api
from test_orm.settings import TORTOISE_ORM

app = FastAPI()

app.include_router(student_api, prefix="/student", tags=["学生接口"])

# register_tortoise是注册函数,fastapi一旦运行,register_tortoise已经执行,通过传递进去的app对象,监听服务启动和终止事件
register_tortoise(
    app=app,
    config=TORTOISE_ORM,
)

if __name__ == '__main__':
    uvicorn.run('main:app', host='127.0.0.1', port=8001, reload=True, workers=1)

请求结果

image