这是一个由 Python3.6 与 Vue.js 全家桶构建的现代社区系统。
可能包含以下内容:
大部分内容由一个人单打独斗制成。
同时是一个基本 0 设计的程序员产品。
移动端的支持程度令人感到不安。
GitHub 上的 star 按钮,Excited.
杂乱无章的演示站点: https://t.myrpg.cn
井然有序的 Repo 页面: https://github.com/fy0/icarus
这个版本着重强化了一下程序的安全性,在新的密码机制下,后端密码将加盐哈希迭代 10 万次后存储。这个迭代次数是相关报告(2017 年)建议数字一万次的十倍。本来计划了更多的次数,但在百万次后我的低压 U 机器发生了明显的卡顿,考虑到个人 VPS 性能更差,因此就没有继续提升迭代次数了。
前端密码则以固定盐哈希迭代 10 万次后再向后端发送,这是为了防备非 https 环境下的中间人攻击,可以用于一些私人的或者是内网环境下的小破论坛场景,同时后端不再有机会得到明文密码。
这个版本对文章列表的展示方式做了几乎完全的重构。从较为传统的“浏览板块列表 - 进入某个板块 - 浏览文章”的模式转为了一个页面布局同时展示板块列表和文章列表的模式。同时对论坛的全部内容做了一个简单的聚合。
这主要考虑到了:
大家可能也看得出来这中间 Flarum 做了非常多的借鉴。其实研究来研究去,我发现此类社区的布局貌似总共就三种:Flarum 这种、V2EX 这种、Discourse 则自成一派。
我不喜欢 Discourse 那种一横条一横条的风格,V2EX 风格则是太多珠玉在前,自己又想不出什么更加牛逼的布局方式,因此就效仿他人故智了。
虽然我个人觉得这样更扁平的论坛显得更好,但想必也不是人人满意,不知道大家有什么看法?
1
fy OP 对了补充两句
## 关于 Websocket 连接的移除 我使用的腾讯云 CDN 似乎仍然不能很好的支持 ws 回源,为了避免暴露服务器地址就砍掉了。 毕竟传统轮询又不是不能用(滑稽)。 当然如果可以用了,我还是会加回去,毕竟 ws 能搞不少事情。 ## 升级指南 * 通过 backend/misc/upgrade 下的升级脚本完成升级应该没什么问题,建议复制到 backend 目录下执行 * 由于提醒机制的完全重做,用户的第一次重新登录会刷新提醒列表,会出现多个新提醒 * 用于密码机制的重做,在默认配置下所有用户都应该通过邮箱重置密码后才能登录。可以手动关闭新的安全密码机制,即 config 中设定`USER_SECURE_AUTH_ENABLE = False` 来继续使用老机制。 * 其实我估计大概根本没人需要这个升级指南吧……真的有人用了 1.0 版本吗? |
2
ddup 2018-09-29 23:50:04 +08:00
界面不错啊!
|
3
Trim21 2018-09-29 23:55:07 +08:00
还是 aiohttp 的...star 了
|
4
coolesting 2018-09-30 00:09:15 +08:00 via Android
用 vue 做的界面果然高大上,比我的好多了
|
5
luckyswag 2018-09-30 00:21:59 +08:00
vue 就是屌
|
6
ArchiTech 2018-09-30 06:26:06 +08:00
成果看起来很不错啊,UI 好看速度也快。而且居然是自己一个人做出来的,太厉害了。不过一个人做很辛苦吧,日后要维护起来也不容易,而且还得提供主体插件接口方便别人用的时候可以 customize。。
我最近也做了个简单的论坛,直接用 nodebb 做的,然后自己写了主题插件,比如首页瀑布流的图片显示 - https://catlog.club/ |
7
allinoneok 2018-09-30 06:51:06 +08:00 via Android 1
那个载入等待特效看得多了 很烦
|
8
omph 2018-09-30 08:35:05 +08:00 1
那个载入特效确实太狂放,不舒服
这样的版面看久了对眼睛不好,因为 UI 没有体现层次感,过分扁平,经常需要眼睛去定位,累 |
9
mathzhaoliang 2018-09-30 08:52:40 +08:00 1
UI 应该改进,你使用的色彩太多,容易分散用户的注意力,时间长了看起来很累。
一个好的论坛,好看的界面只是冰山上的那一角,有许多影响个人体验的细节。举个例子,markdown 编辑器支持 mathjax 数学公式吗? |
10
bucky 2018-09-30 09:17:12 +08:00 1
什么字体,太细了,都快看不见了
|
11
fy OP @allinoneok #7
我看看怎么搞个更柔和的载入效果,例如说改成评论加载那样的灰色 placeholder。切换板块的时候加载动画比普通页面偏上,这可能也是不协调的缘故之一。我笔记本的 13 寸屏注意不到,换个大屏就比较明显了。 @omph #8 说到过分扁平的问题,主要的取舍是关于有没有外框的这么一个设定。我这里选择了没有,再加上个人水平的原因就呈现了这样的结果。我会继续想一想,尽量从各方面做改进。 @mathzhaoliang #9 谢谢,我会尽量想办法做调整的。目前想法是进一步先将文章标题突出。板块带来的颜色区分没什么办法,虽然已经通过淡化色彩压制了一下,但好像还是…… 其他的方面只能持续努力了,毕竟这种东西细节太多,无法一蹴而就。markdown 部分的话现在依赖的 SimpleMDE 年久失修非常僵硬,可惜 vue.js 没有 slate.js 这样牛逼的终极文本编辑器解决方案。markdown 语法也就开了一个 gfw 扩展+语法高亮而已。 ======= 总之感谢大家的反馈吧,我会继续努力改进。 下版本争取实现一些喜欢、收藏、感谢之类的功能,把华夏特色的手机验证做了,重构一些老的页面,并加入更多与 spam 的对抗策略。 |
12
fy OP @bucky #10
额,能否告知系统和浏览器。 字体设置是已经忘了从哪抄的:font-family: PingFang SC, Lantinghei SC, Microsoft Yahei, Hiragino Sans GB, Microsoft Sans Serif, WenQuanYi Micro Hei, sans, FontAwesome, sans-serif; |
14
nifanle7 2018-09-30 10:22:44 +08:00
第一次知道 Flarum、Discourse。看了下,UI 都比较舒服,谢谢楼主科普。
|
15
pimin 2018-09-30 10:32:35 +08:00
粉了 fy god
|
16
zwpaper 2018-09-30 11:32:21 +08:00 via iPhone
手机点了一下主页,基本处于不能看状态
|
17
fy OP |
18
zhzer 2018-09-30 12:05:03 +08:00 via Android
问个面试官专用问题
这个项目有什么亮点吗? |
19
sobigfish 2018-09-30 12:22:55 +08:00 1
就是觉得 UI 有点像 flarum 的 https://discuss.flarum.org/ (好像也是学 nodebb )
但提到 flarum 和 nodebb 的原因是 tag, 能支持 tag 就好了 |
20
ThunderStruck 2018-09-30 13:43:00 +08:00
爱抚歪我来组成移动端
|
21
hinate 2018-09-30 14:14:34 +08:00 1
显示重叠:Chrome 69 macbookpro 13
|
23
oukichi 2018-09-30 15:32:54 +08:00 1
用户协议部分样式错了。
并且我注册失败不知道为什么。我也没有看 HTTP 报文。 |
24
fy OP @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 感谢反馈,我研究一下怎么回事。 |
26
nockyQ 2018-09-30 17:29:36 +08:00
这样的 fy dog pink 了
|
27
Mitt 2018-10-01 12:08:58 +08:00 via iPhone
可以对手机端显示再优化一下
|
28
natforum 2018-10-02 15:09:27 +08:00 1
先不看代码,README 写得不错,果断 star
|
29
9ki 2018-10-02 19:27:55 +08:00
不考虑 nuxt.js(SSR) , SPA 对 SEO 不友好...
|
30
9ki 2018-10-02 19:28:42 +08:00
"不考虑 nuxt.js(SSR) , SPA 对 SEO 不友好...".replace(",","?")
|
31
suyuyu 2018-10-02 20:59:28 +08:00
移动端好像还没支持?
|
32
fy OP |
33
a132811 2018-10-07 18:49:14 +08:00
aiohttp vue node postgreSql 嗯,是我喜欢的技术栈。
SSR 的话 vue 提供了 Next.js 。我也不喜欢搞 SSR, 还有个方法是 url 请求时,判断如果是爬虫,就直接响应原文(只适合不需要额外渲染的博客这种) |