V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
fy
V2EX  ›  分享创造

Python3 实现的社区系统 Icarus v1.1,也请大家找找 BUG

  •  
  •   fy ·
    fy0 · 2018-09-29 23:17:02 +08:00 · 4232 次点击
    这是一个创建于 2253 天前的主题,其中的信息可能已经有所发展或是发生改变。

    简介


    这是一个由 Python3.6 与 Vue.js 全家桶构建的现代社区系统。

    可能包含以下内容:

    • 大部分内容由一个人单打独斗制成。

    • 同时是一个基本 0 设计的程序员产品。

    • 移动端的支持程度令人感到不安。

    • GitHub 上的 star 按钮,Excited.

    杂乱无章的演示站点: https://t.myrpg.cn

    井然有序的 Repo 页面: https://github.com/fy0/icarus

    版本主题 - 安全


    这个版本着重强化了一下程序的安全性,在新的密码机制下,后端密码将加盐哈希迭代 10 万次后存储。这个迭代次数是相关报告(2017 年)建议数字一万次的十倍。本来计划了更多的次数,但在百万次后我的低压 U 机器发生了明显的卡顿,考虑到个人 VPS 性能更差,因此就没有继续提升迭代次数了。

    前端密码则以固定盐哈希迭代 10 万次后再向后端发送,这是为了防备非 https 环境下的中间人攻击,可以用于一些私人的或者是内网环境下的小破论坛场景,同时后端不再有机会得到明文密码。

    版本主题 2 - 内容聚合


    这个版本对文章列表的展示方式做了几乎完全的重构。从较为传统的“浏览板块列表 - 进入某个板块 - 浏览文章”的模式转为了一个页面布局同时展示板块列表和文章列表的模式。同时对论坛的全部内容做了一个简单的聚合。

    这主要考虑到了:

    1. 拥有大量板块时,让一些层级较深的内容不被淹没
    2. 站点内容较少时,不会显得很空旷
    3. 维护起来简单

    大家可能也看得出来这中间 Flarum 做了非常多的借鉴。其实研究来研究去,我发现此类社区的布局貌似总共就三种:Flarum 这种、V2EX 这种、Discourse 则自成一派。

    我不喜欢 Discourse 那种一横条一横条的风格,V2EX 风格则是太多珠玉在前,自己又想不出什么更加牛逼的布局方式,因此就效仿他人故智了。

    虽然我个人觉得这样更扁平的论坛显得更好,但想必也不是人人满意,不知道大家有什么看法?

    附录:更新日志


    https://t.myrpg.cn/topic/1002

    34 条回复    2018-10-12 01:36:57 +08:00
    fy
        1
    fy  
    OP
       2018-09-29 23:33:36 +08:00
    对了补充两句

    ## 关于 Websocket 连接的移除

    我使用的腾讯云 CDN 似乎仍然不能很好的支持 ws 回源,为了避免暴露服务器地址就砍掉了。

    毕竟传统轮询又不是不能用(滑稽)。

    当然如果可以用了,我还是会加回去,毕竟 ws 能搞不少事情。

    ## 升级指南

    * 通过 backend/misc/upgrade 下的升级脚本完成升级应该没什么问题,建议复制到 backend 目录下执行

    * 由于提醒机制的完全重做,用户的第一次重新登录会刷新提醒列表,会出现多个新提醒

    * 用于密码机制的重做,在默认配置下所有用户都应该通过邮箱重置密码后才能登录。可以手动关闭新的安全密码机制,即 config 中设定`USER_SECURE_AUTH_ENABLE = False` 来继续使用老机制。

    * 其实我估计大概根本没人需要这个升级指南吧……真的有人用了 1.0 版本吗?
    ddup
        2
    ddup  
       2018-09-29 23:50:04 +08:00
    界面不错啊!
    Trim21
        3
    Trim21  
       2018-09-29 23:55:07 +08:00
    还是 aiohttp 的...star 了
    coolesting
        4
    coolesting  
       2018-09-30 00:09:15 +08:00 via Android
    用 vue 做的界面果然高大上,比我的好多了
    luckyswag
        5
    luckyswag  
       2018-09-30 00:21:59 +08:00
    vue 就是屌
    ArchiTech
        6
    ArchiTech  
       2018-09-30 06:26:06 +08:00
    成果看起来很不错啊,UI 好看速度也快。而且居然是自己一个人做出来的,太厉害了。不过一个人做很辛苦吧,日后要维护起来也不容易,而且还得提供主体插件接口方便别人用的时候可以 customize。。
    我最近也做了个简单的论坛,直接用 nodebb 做的,然后自己写了主题插件,比如首页瀑布流的图片显示 - https://catlog.club/
    allinoneok
        7
    allinoneok  
       2018-09-30 06:51:06 +08:00 via Android   ❤️ 1
    那个载入等待特效看得多了 很烦
    omph
        8
    omph  
       2018-09-30 08:35:05 +08:00   ❤️ 1
    那个载入特效确实太狂放,不舒服
    这样的版面看久了对眼睛不好,因为 UI 没有体现层次感,过分扁平,经常需要眼睛去定位,累
    mathzhaoliang
        9
    mathzhaoliang  
       2018-09-30 08:52:40 +08:00   ❤️ 1
    UI 应该改进,你使用的色彩太多,容易分散用户的注意力,时间长了看起来很累。

    一个好的论坛,好看的界面只是冰山上的那一角,有许多影响个人体验的细节。举个例子,markdown 编辑器支持 mathjax 数学公式吗?
    bucky
        10
    bucky  
       2018-09-30 09:17:12 +08:00   ❤️ 1
    什么字体,太细了,都快看不见了
    fy
        11
    fy  
    OP
       2018-09-30 09:48:34 +08:00
    @allinoneok #7
    我看看怎么搞个更柔和的载入效果,例如说改成评论加载那样的灰色 placeholder。切换板块的时候加载动画比普通页面偏上,这可能也是不协调的缘故之一。我笔记本的 13 寸屏注意不到,换个大屏就比较明显了。

    @omph #8
    说到过分扁平的问题,主要的取舍是关于有没有外框的这么一个设定。我这里选择了没有,再加上个人水平的原因就呈现了这样的结果。我会继续想一想,尽量从各方面做改进。

    @mathzhaoliang #9
    谢谢,我会尽量想办法做调整的。目前想法是进一步先将文章标题突出。板块带来的颜色区分没什么办法,虽然已经通过淡化色彩压制了一下,但好像还是……

    其他的方面只能持续努力了,毕竟这种东西细节太多,无法一蹴而就。markdown 部分的话现在依赖的 SimpleMDE 年久失修非常僵硬,可惜 vue.js 没有 slate.js 这样牛逼的终极文本编辑器解决方案。markdown 语法也就开了一个 gfw 扩展+语法高亮而已。

    =======

    总之感谢大家的反馈吧,我会继续努力改进。

    下版本争取实现一些喜欢、收藏、感谢之类的功能,把华夏特色的手机验证做了,重构一些老的页面,并加入更多与 spam 的对抗策略。
    fy
        12
    fy  
    OP
       2018-09-30 09:51:39 +08:00
    @bucky #10

    额,能否告知系统和浏览器。

    字体设置是已经忘了从哪抄的:font-family: PingFang SC, Lantinghei SC, Microsoft Yahei, Hiragino Sans GB, Microsoft Sans Serif, WenQuanYi Micro Hei, sans, FontAwesome, sans-serif;
    bucky
        13
    bucky  
       2018-09-30 10:19:04 +08:00
    @fy win7 chrome
    nifanle7
        14
    nifanle7  
       2018-09-30 10:22:44 +08:00
    第一次知道 Flarum、Discourse。看了下,UI 都比较舒服,谢谢楼主科普。
    pimin
        15
    pimin  
       2018-09-30 10:32:35 +08:00
    粉了 fy god
    zwpaper
        16
    zwpaper  
       2018-09-30 11:32:21 +08:00 via iPhone
    手机点了一下主页,基本处于不能看状态
    fy
        17
    fy  
    OP
       2018-09-30 12:04:33 +08:00
    @pimin #15

    这是我姓名的缩写,可惜我是一个 3000 分老年波特菜鸡选手。并没有因此沾到真正的 fy god 的光。

    @zwpaper #16

    哈哈,这就是令人不安程度的移动端支持啊……后面有更多的时间精力之后会逐渐改善。
    zhzer
        18
    zhzer  
       2018-09-30 12:05:03 +08:00 via Android
    问个面试官专用问题

    这个项目有什么亮点吗?
    sobigfish
        19
    sobigfish  
       2018-09-30 12:22:55 +08:00   ❤️ 1
    就是觉得 UI 有点像 flarum 的 https://discuss.flarum.org/ (好像也是学 nodebb )
    但提到 flarum 和 nodebb 的原因是 tag, 能支持 tag 就好了
    ThunderStruck
        20
    ThunderStruck  
       2018-09-30 13:43:00 +08:00
    爱抚歪我来组成移动端
    hinate
        21
    hinate  
       2018-09-30 14:14:34 +08:00   ❤️ 1
    显示重叠:Chrome 69 macbookpro 13
    hinate
        22
    hinate  
       2018-09-30 14:16:31 +08:00
    @hinate #21 ![]( )
    oukichi
        23
    oukichi  
       2018-09-30 15:32:54 +08:00   ❤️ 1
    用户协议部分样式错了。
    并且我注册失败不知道为什么。我也没有看 HTTP 报文。
    fy
        24
    fy  
    OP
       2018-09-30 15:59:13 +08:00   ❤️ 1
    @zhzer #18

    以面试语气回答:

    1.

    虽然是一个 Yet Another 项目,但是 py 实现的较为有名且至今稳定更新的开源社区项目极少,更不要提 Python3.6 之后广泛应用 async、type hints 等特性的相关实践了。

    2.

    从架构上讲,Icarus 项目代表了一种全新的后端思路,而个人认为这很可能是 web 后端的未来形态,即轻量后端。

    这一思路的核心是将数据表直接对应到 Web API 接口,再结合框架提供的参数类型检查、鉴权机制和一些手动编写的传统 API 接口(主要用来提升用户权限,例如登录),这就能够解决 80%的 CURD 场景了,减少了大量重复工作。

    这也是为什么初期 Icarus 开发进展的非常慢的一个重要原因(至今为止差不多一年了,一个多月前才发布 1.0。另一个重要原因是摸鱼)。

    有一些其他项目同样代表了这一思路,例如 graphql,apistar,postgrest 等等。

    这算是我的一次个人实践,效果基本还可以,美中不足的是数据库访问主要由同步的 peewee 驱动,没能完全发挥异步的优势。但这是时间成本上的考量,可以通过替换中间件来整体解决。

    https://github.com/fy0/slim

    3.

    未来将更加重视安全性与个人隐私。

    已经做了一些工作,例如说使用安全的加密算法并加随机盐,慢哈希,前端密码加密等等。

    还有简单的防爆破: https://github.com/fy0/Icarus/blob/master/backend/config.py#L125-L139

    以及 IP 地址脱敏后才存入数据库。

    以后还将做更多。

    4.

    重视延续性。

    目前对外发布了 2 个版本,当前版本是第二个,但是版本库里有 4 个升级脚本。

    https://github.com/fy0/Icarus/tree/master/backend/misc/upgrade

    其中三个都是未发布时编写的。

    我正打算用 Icarus 搭建一个基于个人兴趣爱好的小站,因此会长期持续维护的。


    @hinate #21

    感谢反馈,我研究一下怎么回事。
    fy
        25
    fy  
    OP
       2018-09-30 16:08:01 +08:00
    @oukichi #23 看了下日志,解决了
    nockyQ
        26
    nockyQ  
       2018-09-30 17:29:36 +08:00
    这样的 fy dog pink 了
    Mitt
        27
    Mitt  
       2018-10-01 12:08:58 +08:00 via iPhone
    可以对手机端显示再优化一下
    natforum
        28
    natforum  
       2018-10-02 15:09:27 +08:00   ❤️ 1
    先不看代码,README 写得不错,果断 star
    9ki
        29
    9ki  
       2018-10-02 19:27:55 +08:00
    不考虑 nuxt.js(SSR) , SPA 对 SEO 不友好...
    9ki
        30
    9ki  
       2018-10-02 19:28:42 +08:00
    "不考虑 nuxt.js(SSR) , SPA 对 SEO 不友好...".replace(",","?")
    suyuyu
        31
    suyuyu  
       2018-10-02 20:59:28 +08:00
    移动端好像还没支持?
    fy
        32
    fy  
    OP
       2018-10-02 23:46:10 +08:00
    @suyuyu #31 对啊,暂时没那么多精力,后续会优化。

    @9ki #29 其实是对百度不友好,同样精力有限,SSR 支持排序很靠后了。
    a132811
        33
    a132811  
       2018-10-07 18:49:14 +08:00
    aiohttp vue node postgreSql 嗯,是我喜欢的技术栈。
    SSR 的话 vue 提供了 Next.js 。我也不喜欢搞 SSR, 还有个方法是 url 请求时,判断如果是爬虫,就直接响应原文(只适合不需要额外渲染的博客这种)
    fy
        34
    fy  
    OP
       2018-10-12 01:36:57 +08:00
    @hinate #22
    @oukichi #23

    已修复。我把 checkbox 从 input 改成 svg 了,理论上会全部浏览器效果统一。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2700 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 05:31 · PVG 13:31 · LAX 21:31 · JFK 00:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.