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

2018-09-29 23:17:02 +08:00
 fy

简介


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

可能包含以下内容:

杂乱无章的演示站点: 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

4057 次点击
所在节点    分享创造
34 条回复
hinate
2018-09-30 14:14:34 +08:00
显示重叠:Chrome 69 macbookpro 13
hinate
2018-09-30 14:16:31 +08:00
@hinate #21 ![]( )
oukichi
2018-09-30 15:32:54 +08:00
用户协议部分样式错了。
并且我注册失败不知道为什么。我也没有看 HTTP 报文。
fy
2018-09-30 15:59:13 +08:00
@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
2018-09-30 16:08:01 +08:00
@oukichi #23 看了下日志,解决了
nockyQ
2018-09-30 17:29:36 +08:00
这样的 fy dog pink 了
Mitt
2018-10-01 12:08:58 +08:00
可以对手机端显示再优化一下
natforum
2018-10-02 15:09:27 +08:00
先不看代码,README 写得不错,果断 star
9ki
2018-10-02 19:27:55 +08:00
不考虑 nuxt.js(SSR) , SPA 对 SEO 不友好...
9ki
2018-10-02 19:28:42 +08:00
"不考虑 nuxt.js(SSR) , SPA 对 SEO 不友好...".replace(",","?")
suyuyu
2018-10-02 20:59:28 +08:00
移动端好像还没支持?
fy
2018-10-02 23:46:10 +08:00
@suyuyu #31 对啊,暂时没那么多精力,后续会优化。

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

已修复。我把 checkbox 从 input 改成 svg 了,理论上会全部浏览器效果统一。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/493988

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX