30分钟上线企业级任务系统:full-stack-fastapi-postgresql实战指南

30分钟上线企业级任务系统:full-stack-fastapi-postgresql实战指南

【免费下载链接】full-stack-fastapi-postgresql tiangolo/full-stack-fastapi-postgresql: 这是一个用于构建全栈Web应用程序的Python框架,使用FastAPI和PostgreSQL。适合用于需要使用Python构建高性能Web应用程序的场景。特点:易于使用,具有高性能和自动路由功能,支持PostgreSQL数据库。 【免费下载链接】full-stack-fastapi-postgresql 项目地址: https://gitcode.com/GitHub_Trending/fu/full-stack-fastapi-postgresql

你还在为搭建全栈项目耗费数周时间?从数据库设计到前后端联调,从认证授权到部署上线,每个环节都可能踩坑。本文将带你用full-stack-fastapi-postgresql框架,从零开始构建一个支持用户管理、权限控制、数据持久化的企业级任务管理系统,全程仅需30分钟。读完本文你将掌握:Docker一键部署全栈应用、FastAPI后端接口开发、React前端组件复用、PostgreSQL数据建模的核心技能。

为什么选择full-stack-fastapi-postgresql?

该框架是GitHub热门开源项目,集成了现代Web开发的最佳实践。后端基于FastAPI构建,提供自动生成的交互式API文档和高性能异步支持;前端采用React+TypeScript+Chakra UI,实现了响应式设计和深色模式;数据库使用PostgreSQL,通过SQLModel实现类型安全的ORM操作。项目架构如图所示:

系统架构图

核心技术栈亮点:

  • 自动API客户端:前端通过openapi-ts自动生成API调用代码,避免手动编写HTTP请求
  • 完整认证流程:支持JWT令牌认证、密码重置邮件、角色权限管理
  • 容器化部署:Docker Compose配置支持开发/生产环境一键切换
  • 测试覆盖:Pytest后端测试+Playwright端到端测试确保代码质量

项目完整文档可参考:README.md,开发指南:development.md

环境准备与项目初始化

快速启动项目

首先克隆仓库并进入项目目录:

git clone https://gitcode.com/GitHub_Trending/fu/full-stack-fastapi-postgresql.git task-management-system
cd task-management-system

生成安全密钥(用于JWT签名和数据库密码):

python -c "import secrets; print(secrets.token_urlsafe(32))"

配置环境变量

复制示例环境变量文件并修改关键配置:

cp .env.example .env

需要修改的核心配置项:

  • SECRET_KEY:刚才生成的安全密钥
  • FIRST_SUPERUSER:管理员邮箱(如admin@example.com)
  • FIRST_SUPERUSER_PASSWORD:管理员密码
  • POSTGRES_PASSWORD:PostgreSQL数据库密码

详细配置说明可参考:deployment.md

启动服务

使用Docker Compose一键启动所有服务:

docker compose up -d

该命令会启动5个容器:FastAPI后端、React前端、PostgreSQL数据库、Traefik反向代理和Adminer数据库管理工具。首次启动会自动初始化数据库结构和默认管理员账户。

后端开发:从数据模型到API接口

任务数据模型设计

修改backend/app/models.py文件,添加任务模型:

class TaskBase(SQLModel):
    title: str = Field(index=True)
    description: Optional[str] = Field(default=None)
    status: str = Field(default="pending", index=True)
    owner_id: UUID = Field(foreign_key="user.id", index=True)

class Task(TaskBase, table=True):
    id: UUID = Field(default_factory=uuid4, primary_key=True)
    created_at: datetime = Field(default_factory=datetime.utcnow)
    updated_at: datetime = Field(default_factory=datetime.utcnow, sa_column_kwargs={"onupdate": datetime.utcnow})

创建任务CRUD接口

backend/app/crud.py中添加任务的增删改查操作:

def create_task(db: Session, *, task_in: TaskCreate, owner_id: UUID) -> Task:
    db_obj = Task.from_orm(task_in)
    db_obj.owner_id = owner_id
    db.add(db_obj)
    db.commit()
    db.refresh(db_obj)
    return db_obj

def get_tasks_by_owner(db: Session, *, owner_id: UUID, skip: int = 0, limit: int = 100) -> list[Task]:
    return db.query(Task).filter(Task.owner_id == owner_id).offset(skip).limit(limit).all()

注册API路由

创建backend/app/api/routes/tasks.py文件,定义任务相关接口:

@router.post("/tasks/", response_model=TaskRead)
def create_task(
    *,
    task_in: TaskCreate,
    db: Session = Depends(deps.get_db),
    current_user: User = Depends(deps.get_current_active_user),
) -> Any:
    """Create new task."""
    return crud.task.create(db=db, task_in=task_in, owner_id=current_user.id)

@router.get("/tasks/", response_model=list[TaskRead])
def read_tasks(
    db: Session = Depends(deps.get_db),
    current_user: User = Depends(deps.get_current_active_user),
    skip: int = 0,
    limit: int = 100,
) -> Any:
    """Retrieve tasks."""
    return crud.task.get_multi_by_owner(db=db, owner_id=current_user.id, skip=skip, limit=limit)

后端源码目录结构:backend/app/,API路由定义:backend/app/api/routes/

前端开发:任务管理界面实现

使用自动生成的API客户端

框架已通过openapi-ts自动生成前端API客户端,位于frontend/src/client/sdk.gen.ts。无需手动编写Axios请求,直接调用类型安全的API方法:

import { tasksApi } from "src/client/sdk.gen";

// 获取任务列表
const fetchTasks = async () => {
  setLoading(true);
  try {
    const response = await tasksApi.readTasks();
    setTasks(response.data);
  } catch (error) {
    toast({ title: "获取任务失败", status: "error" });
  } finally {
    setLoading(false);
  }
};

创建任务列表组件

frontend/src/components/Tasks/TaskList.tsx中实现任务列表:

import { Box, Table, Thead, Tbody, Tr, Th, Td, Button } from "@chakra-ui/react";
import { Task } from "src/client/schemas.gen";

interface TaskListProps {
  tasks: Task[];
  onEdit: (task: Task) => void;
  onDelete: (task: Task) => void;
}

export const TaskList = ({ tasks, onEdit, onDelete }: TaskListProps) => {
  return (
    <Box overflowX="auto">
      <Table variant="simple">
        <Thead>
          <Tr>
            <Th>标题</Th>
            <Th>状态</Th>
            <Th>创建时间</Th>
            <Th>操作</Th>
          </Tr>
        </Thead>
        <Tbody>
          {tasks.map((task) => (
            <Tr key={task.id}>
              <Td>{task.title}</Td>
              <Td>{task.status}</Td>
              <Td>{new Date(task.created_at).toLocaleString()}</Td>
              <Td>
                <Button size="sm" onClick={() => onEdit(task)}>编辑</Button>
                <Button size="sm" colorScheme="red" onClick={() => onDelete(task)} ml={2}>删除</Button>
              </Td>
            </Tr>
          ))}
        </Tbody>
      </Table>
    </Box>
  );
};

添加路由和页面

修改frontend/src/routes/_layout/目录下的路由配置,添加任务管理页面:

// 在_layout/index.tsx中添加导航项
<LinkButton as={NavLink} to="/tasks" name="任务管理" />

// 创建任务管理页面 routes/_layout/tasks.tsx
import { TaskList } from "src/components/Tasks/TaskList";
import { TaskForm } from "src/components/Tasks/TaskForm";

export default function TasksPage() {
  // 页面逻辑实现...
  return (
    <Box p={4}>
      <TaskForm onTaskCreated={fetchTasks} />
      <TaskList tasks={tasks} onEdit={openEditModal} onDelete={handleDelete} />
    </Box>
  );
}

前端组件库参考:frontend/src/components/,路由配置:frontend/src/routes/

系统功能演示

用户认证流程

系统提供完整的注册、登录、密码重置流程。用户登录界面支持JWT令牌认证,登录后令牌存储在localStorage中,有效期24小时。

登录界面

任务管理功能

已实现的核心功能:

  • 任务创建/编辑/删除
  • 任务状态切换(待办/进行中/已完成)
  • 任务搜索和过滤
  • 分页加载任务列表

任务管理界面

管理员功能

超级管理员可以管理系统用户,包括创建用户、分配角色、修改权限等操作。

用户管理界面

深色模式支持

框架内置Chakra UI的深色模式切换功能,一键切换界面主题:

深色模式

部署上线与系统维护

生产环境配置

修改docker-compose.yml文件,配置生产环境参数:

  • 禁用开发工具和热重载
  • 启用Traefik自动HTTPS证书
  • 配置数据库持久化存储

详细部署步骤参考:deployment.md

数据库备份

创建定时任务备份PostgreSQL数据:

# 添加到crontab,每天凌晨3点执行备份
0 3 * * * docker exec task-management-system_db_1 pg_dump -U postgres app > /backup/$(date +\%Y\%m\%d).sql

系统监控

通过Traefik Dashboard监控系统状态和请求 metrics:

API文档

总结与扩展方向

本文展示了如何基于full-stack-fastapi-postgresql快速构建企业级任务管理系统。框架提供的不仅仅是代码模板,更是一套完整的开发规范和最佳实践。通过Docker容器化部署,我们实现了开发环境与生产环境的一致性;通过自动生成的API客户端,消除了前后端协作的沟通成本;通过完整的认证授权系统,保障了应用的安全性。

后续扩展方向:

  1. 集成Redis实现任务缓存和消息队列
  2. 添加WebSocket支持实现任务实时推送
  3. 接入第三方存储服务(如MinIO)存储任务附件
  4. 使用Celery实现异步任务处理(如邮件通知、报表生成)

项目源码地址:https://gitcode.com/GitHub_Trending/fu/full-stack-fastapi-postgresql,欢迎Star收藏并贡献代码。

【免费下载链接】full-stack-fastapi-postgresql tiangolo/full-stack-fastapi-postgresql: 这是一个用于构建全栈Web应用程序的Python框架,使用FastAPI和PostgreSQL。适合用于需要使用Python构建高性能Web应用程序的场景。特点:易于使用,具有高性能和自动路由功能,支持PostgreSQL数据库。 【免费下载链接】full-stack-fastapi-postgresql 项目地址: https://gitcode.com/GitHub_Trending/fu/full-stack-fastapi-postgresql

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值