全部工程
Flask 写作与交流 · 在线可体验

Liss Community · 记录与交流

自学 Flask 与前端 Web 技术的完整实践,把账户、文字和互动串起来。

技术方向
Web 全栈 / 内容社区
设计主张
低门槛参与,让身份与内容长期留存。
关键能力
  • 访客与可选邮箱
  • Markdown 写作
  • 可恢复内容管理

三篇简短初始帖、图文摘要与写作入口组成线上首页。

把 Web 学习串成交流空间

Liss Community 起于自学 Flask 后端与前端 Web 技术时的实操练习。用社交博客把账户、权限和内容交互接成完整流程,曾部署于 Heroku;如今适配现代环境,以新的深色界面承载记录与交流。

技术构成

Jinja2 / HTML
复用服务端模板,生成文章、资料与管理页面。
Bootstrap 3 / Flask-Bootstrap
提供基础页面模板,接入 CSS、jQuery 与组件脚本。
CSS / 原生 JS / Moment.js
Grid、Flex 与变量主题,原生交互及相对时间显示。
EasyMDE / DOMPurify
基于 CodeMirror 编辑 Markdown,提供分屏预览与 HTML 清理。
Flask / SQLAlchemy
处理请求、账号权限与内容之间的关系模型。
Flask-Login / Flask-WTF
提供登录会话、表单验证与 CSRF 校验。
SQLite / Alembic
持久保存内容,配合增量迁移与一致性备份。
Brevo / HTTPS API
发送邮箱验证、绑定与密码找回邮件。

设计与实现

未提交的 Markdown 草稿与实时预览同屏,包含列表、代码块和发布入口。 放大查看
未提交的 Markdown 草稿与实时预览同屏,包含列表、代码块和发布入口。

让内容与用户连接

完整页面,按需增强

Jinja2 输出服务端页面,原生表单承担提交;写作时加载 EasyMDE,编辑器脚本不可用时仍保留文本框。

关系驱动内容

账户、角色权限、关注、文章与评论共用数据库模型,作品讨论与日常文章在同一社区连接。

预览与保存分别校验

浏览器用 DOMPurify 清理预览;服务端用 Python Markdown 与 Bleach 处理最终正文,保存为 SQLite 中的文章和评论。

以访客身份加入,也可创建账号或登录,继续写作与交流。 放大查看
以访客身份加入,也可创建账号或登录,继续写作与交流。

从访客到可找回的账号

身份延续,邮箱可选

访客升级账号沿用同一个用户 ID,文章、评论与关注关系无需搬迁。邮箱可以留空,之后也能绑定或更换。

验证、绑定与密码找回

通过 Brevo HTTPS API 发送验证、绑定与找回邮件;更换邮箱需确认后生效,发信失败也保留账号与内容。

限时令牌与发送限流

ItsDangerous 为确认与找回链接生成 1 小时有效、按用途隔离的签名令牌,配合 CSRF 与发送限流;密钥保存在服务器私有配置中。

线上管理概览,汇总公开与隐藏内容、用户状态及最近操作。 放大查看
线上管理概览,汇总公开与隐藏内容、用户状态及最近操作。

管理有入口,操作可追溯

内容可以恢复

搜索并预览文章与评论,按上下文隐藏或恢复;公开页面与计数同步更新。

更改先确认

重要操作先展示变更,再校验 CSRF 与限时单次凭证;操作记录保留时间、对象和结果。

规则持久保存

站点介绍、注册与访客发文规则随数据库保存;增量升级与一致性备份保留既有内容。

画面与演示说明

旧 Heroku 数据没有找回;当前站点从欢迎内容重新开始。访客身份依赖浏览器 Cookie,设置账号后可跨浏览器继续使用。

快速开始

在线阅读与写作

打开站点即可阅读;点击“开始写作”建立访客身份,发布文章、参与讨论或关注作者。内容保存在站点中。

保留自己的身份

访客可直接设置用户名和密码,原有文章、评论与关注关系一起保留。邮箱可选,也能在账号设置中后补或更换;验证后可用于找回密码。

自行部署

仓库提供本地运行、持久数据库、备份恢复和 PythonAnywhere 部署说明,方便继续开发这个小站。

全部工程