起源#
从宝塔软件商店看到未知表白墙,是 MBUI( Material Design User Interface)设计,适合移动端,找到官方文档MDUI - Material Design 样式的前端框架,试试留言墙,
想做个前端渲染,后端 api 提供数据的。由于时间不是很多(零散的时间相当于没有,过一天我就忘了之前写的啥)
后端用 flask(只熟悉 python),之前试过,比较方便
实现#
- 先设计数据库(一开始没想做评论,数据表改了好几次),card 表和评论表
|card 表字段 | 注释 | 评论表字段 | 注释 |
|-|-|-|-|
|id | 卡片唯一标识,自动递增 | id | 评论唯一标识,自动递增 |
|name | 卡片名 | cid | 所属卡片的 id|
|avatar | 卡片创建者头像 (非必须)|depth | 评论嵌套深度 |
|title | 卡片标题 | parent_id | 父级评论的 id|
|data | 卡片内容 | name | 评论者名 |
|imgurl | 卡片顶图 (非必须))|content | 评论内容 |
|time | 卡片创建时间 | time | 评论发表时间 |
|type | 卡片类型 (noimg/withimg)|||
|comment_count | 卡片评论数 |||
评论表 cid 与 card 表 id 对应,cid 判断是属于哪个 card 的评论
后来发现 depth(评论深度)没有用到,只通过 parent_id(上级评论 id)就可以实现多级评论
card 表添加评论计数字段,避免每次都要 select count 评论表
- python-flask 部分先写好了数据库增删查的函数,直接 return 的 json 数据
flask api 部分实现增删查的路由,简单的过滤(安全问题的由来)
- 测试号 pi 接口都正常后开始写前端,由于是客户端渲染,几乎没有用模板语法(除了 js 文件引用部分,), 所以把前端文件从模板文件夹拿出来后只需要改几个路径就能用,
前端实现方法很原始,用 ajax 获取数据拼接到 HTML 字符串中,然后把处理好的 dom 节点插入,
除了 admin 页面,前端只有一个文件,左侧的几个 tab 和文章详情页都在一个页面,通过 JQ 的显示隐藏来实现切换,缺点是难以修改维护,写完后自己也记不得,如果想新增页面,得改很多零散的地方,
结果#
创建 card,每个 card 的评论,card 的删除(密码验证)
两种 card:带图 card, 无图 card
评论嵌套
-
card 包含标题,时间,内容,图片(非必填),头像
-
card 详情页评论
-
card 编辑添加
图片 404 替换,onerr 函数,替换失效函数
主页详情页切换或者刷新时记住页面位置自动跳转
添加内容不刷新临时显示
问题:#
-
都在一个页面,不同 card 如何区分,刷新后岂不是回到主界面了,分享链接也都是主页链接
-
由于没有做 api 请求限制,存在被攻击可能,最好限制一下频率
-
xss 攻击,sql 注入(maybe,打算过滤大于小于号等)
-
没有登录系统,点赞难以实现,提交信息时没有鉴权,日后加上验证码验证
-
评论没有跟随 card 删除,(评论后来加的)
解决#
添加页面标记
js 会在 url 后加参数如http://127.0.0.1:5500/?card=28
带参数访问时 js 读取 card 的 id 自动跳转到详情页面
TODO#
- 添加验证,等 (需要时间)
- [x] 评论删除
- [x] 验证码
总结#
花了 2 天实现部分功能,以后填坑
前端实现方式很原始,花费大量时间,对 flask 框架不熟悉,只用了它的路由功能,前端在摸索,框架什么的是不会学的
预览#
下面是 readme 的一部分(偷个懒)
管理#
无限嵌套评论#