xChar
·2 years ago

起源

从宝塔软件商店看到未知表白墙,是MBUI( Material Design User Interface)设计,适合移动端,找到官方文档MDUI - Material Design 样式的前端框架,试试留言墙,

想做个前端渲染,后端api提供数据的. 由于时间不是很多(零散的时间相当于没有,过一天我就忘了之前写的啥)

后端用flask(只熟悉python),之前试过,比较方便

实现

  1. 先设计数据库(一开始没想做评论,数据表改了好几次),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评论表

  1. python-flask部分先写好了数据库增删查的函数,直接return的json数据

flask api部分实现增删查的路由,简单的过滤(安全问题的由来)


  1. 测试号pi接口都正常后开始写前端,由于是客户端渲染,几乎没有用模板语法(除了js文件引用部分,),所以把前端文件从模板文件夹拿出来后只需要改几个路径就能用,

前端实现方法很原始,用ajax获取数据拼接到HTML字符串中,然后把处理好的dom节点插入,

除了admin页面,前端只有一个文件,左侧的几个tab和文章详情页都在一个页面,通过JQ的显示隐藏来实现切换,缺点是难以修改维护,写完后自己也记不得,如果想新增页面,得改很多零散的地方,

结果

创建card,每个card的评论,card的删除(密码验证)

两种card:带图card,无图card

评论嵌套

  1. card包含标题,时间,内容,图片(非必填),头像

  2. card详情页评论

  3. card编辑添加

图片404替换,onerr函数,替换失效函数

主页详情页切换或者刷新时记住页面位置自动跳转
添加内容不刷新临时显示

问题:

  1. 都在一个页面,不同card如何区分,刷新后岂不是回到主界面了,分享链接也都是主页链接

  2. 由于没有做api请求限制,存在被攻击可能, 最好限制一下频率

  3. xss攻击,sql注入(maybe,打算过滤大于小于号等)

  4. 没有登录系统,点赞难以实现,提交信息时没有鉴权,日后加上验证码验证

  5. 评论没有跟随card删除,(评论后来加的)

解决

添加页面标记
js会在url后加参数如http://127.0.0.1:5500/?card=28
带参数访问时js读取card的id自动跳转到详情页面

TODO

  • 添加验证,等(需要时间)
  • [ x ] 评论删除
  • [ x ] 验证码

总结

花了2天实现部分功能,以后填坑
前端实现方式很原始,花费大量时间,对flask框架不熟悉,只用了它的路由功能,前端在摸索,框架什么的是不会学的

gitee

预览

下面是readme的一部分(偷个懒)
JHljK

管理

JHfRs

无限嵌套评论

JHjWa

演示

https://www.bilibili.com/video/BV19G4y1n7Si

Loading comments...