大一零基础自学 Flask,两个月肝了一个全栈博客系统,求大佬轻喷
背景
大一,之前完全没接触过编程,纯靠 B 站 + 官方文档 + 微软教程自学。
从 print("Hello World") 到能跑起来一个完整的全栈项目,踩了无数坑,也熬了不少夜。
今天把项目开源出来,一是做个记录,二是真心求大佬们 code review,知道自己哪里写得烂,才能进步。
GitHub:github.com/elysianx138…
项目做了什么
一个用 Flask 搭建的个人博客系统,主要功能:
- 用户系统:注册、登录、权限控制(普通用户 / 管理员)
- 文章系统:CRUD、Markdown 渲染、双向链接(
[[标题]]语法)、文章分级(私密 / 仅浏览 / 完全公开) - 批注系统:完全公开的文章支持多人批注
- 聊天室:登录用户实时聊天
- 文件管理:上传、下载、白名单校验
- 其他:暗黑模式切换、草稿自动保存、阅读量统计、管理员公告
技术栈: Flask + SQLite + 原生 HTML/CSS/JS
项目结构
personal_blog/
├── app.py # 主入口
├── extensions.py # Flask 扩展
├── init_db.py # 数据库初始化
├── routes/ # 蓝图模块
│ ├── user.py # 用户
│ ├── articles.py # 文章
│ ├── chat.py # 聊天室
│ ├── admin.py # 管理
│ ├── api.py # API
│ └── main.py # 首页
├── models/ # 数据模型
├── utils/ # 工具函数
├── static/ # CSS/JS
└── templates/ # HTML 模板
最难的几个坑
1. CSRF 保护
一开始完全不知道 CSRF 是什么,后来查资料才知道 POST 请求需要 token 验证。自己手搓了一个 session 级别的 CSRF(也有AI成分),但 API 路由暂时跳过了检查,这里肯定有问题,求大佬指点怎么改。
2. 双向链接
想实现类似 Obsidian 的 [[标题]] 语法,用正则匹配文章里的引用,然后存成 JSON 关联。实现是能实现,但感觉性能很差,文章多了肯定卡。
3. 数据库设计
用的裸 SQL,没上 ORM(在让AI检查前不知道这个东西)。一开始觉得简单,后来发现每次查数据都要手动构造对象,代码重复很多。下一步打算学 SQLAlchemy,但不知道迁移成本高不高。
感觉不足
求轻喷:
- 数据库名
questions.db和项目语义不匹配(一开始练手随便起的,后来懒得改了) - User 模型只有 7 行,纯手动 class,没和数据库联动
- 没有单元测试
- 没有错误处理和日志
- 文件上传没做大小限制
- 聊天室发消息没加登录校验(已发现,准备修)
- 环境变量加载顺序有 bug(
secret_key在load_dotenv()之前赋值) - Flask蓝图后,测试了一下,感觉一些功能有点影响
下一步计划
- 用 SQLAlchemy 重构数据库层
- 加上单元测试和日志
- 修复已知的安全问题
- 学 Spring Boot,用 Java 重写一遍这个项目
- 接入 LangChain,给博客加 AI 功能(自动摘要、智能搜索、问答助手)
求指点
- 这个项目作为学习成果,在就业市场上算什么水平?
- 从 Flask 转 Spring Boot,学习路线该怎么规划?
- 代码里还有哪些我没意识到的安全问题?
- 有没有大佬愿意帮忙 code review?任何建议都感激不尽!
- 这个项目还有值得改进的地方吗?或者是否有走偏的?
最后
知道自己写得烂,但这是纯自学的第一步。
如果有同样在自学的朋友,欢迎一起交流,互相 review 代码。
如果觉得项目还行,GitHub 给个 star 就是最大的鼓励 ⭐