Minos - 一款基于 Python 的开源社区系统 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
phithon
5.05D
V2EX    Python

Minos - 一款基于 Python 的开源社区系统

  •  1
     
  •   phithon
    phith0n 2015 年 5 月 7 日 9057 次点击
    这是一个创建于 3905 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Minos是一个使用Python编写,基于Tornado/Mongodb/Redis的简约社区系统。
    地址: https://github.com/phith0n/Minos
    测试站点: http://waf.science

    其实就是求几个star,fork 么么哒

    特点

    • 简单:去除传统社区中多数不常用到的功能,保留精华。(这里向 http://zone.wooyun.org 学习)
    • 高效:
      • mongodb:数据库设计合理,以空间换取时间,尽量减少数据库查询次数。
      • 异步:tornado+motor全异步库,增加web高并发访问效率
      • redis:抛弃php中以文件形式保存session的做法,以redis内存数据库保存session,增加速度。
    • 安全:
      • CSP:全站默认开启CSP,以新一代的前端安全策略防御前端安全问题(包括XSS/CSRF/Clickjacking等)。
      • Secure by default原则:使用默认的安全机制,所有业务逻辑问题为安全让步。不符合安全的业务都没有被加入Minos。tornado框架及其安全理念对Minos的安全有突出贡献。
      • 注入漏洞:tornado不允许嵌套解析,用户通过GET/POST传入的参数只是字符串,不会成为list或dict,所以正常情况下不会造成mongodb的注入。
      • 文件上传:python将不会去解析用户上传的任何文件。另外Minos在用户上传时仍然会检查后缀,为防止XSS。
      • XSS漏洞:Tornado框架原则上所有输出在模板里的变量都会经过“HTML实体化”,包括单引号,一般情况下不会存在XSS漏洞。另外,社区帖子内容为富文本,将经过富文本过滤器Python-XSS-Filter( https://github.com/phith0n/python-xss-filter )过滤并输出。
      • CSRF漏洞:Tornado框架在开启xsrf_cookies后,所有POST表单如果没有Token将不会被接受。Minos默认开启srf_cookies,并且所有增删改查操作均通过POST进行。
      • 密码存储:Minos中,用户密码使用bcrypt库计算哈希后存入数据库,加密方法类似Wordpress,不能被简单破译。
    • 稳定:作者处女座的性格处理所有已知问题,不允许一个warning。Minos已在debian上稳定运行多日。
    • 响应式:框架AmazeUI是一个mobile first的前端框架,对于各种屏幕的适应性都很好,加上我在手机屏幕大小的情况下隐藏了很多不必要的功能,所以在手机端也能愉快地看文章啦~

    测试了有一段时间了,然后昨天今天把文档写的差不多了,现在发出来。
    如果你愿意使用,那么请把文档详细读完,我能写的基本都写进去了。如果还有其他疑问的话,可以再来问我。
    并且招募一群喜欢开源、喜欢python的基友,帮我一起完善Minos。

    http://waf.science
    不要误会我自己不想做论坛/社区,这个站只是为了展示Minos功能用哒~
    想用Minos做社区的同学,可以下来和我聊聊,我能帮就帮。

    49 条回复    2015-05-11 11:34:21 +08:00
    laoertongzhi
        1
    laoertongzhi  
       2015 年 5 月 7 日
    围观
    stackpop
        2
    stackpop  
       2015 年 5 月 7 日
    帖子是通过什么聚合的? 似乎没有看到板块或者标签功能
    staticor
        3
    staticor  
       2015 年 5 月 7 日
    我也是处女座 给楼主加一个Star.
    phithon
        4
    phithon  
    OP
       2015 年 5 月 7 日
    @stackpop
    首页面包屑导航下面可以看到板块,发帖的时候也需要选择板块。
    标签没有了,不知道有没有必要加一个~
    donghouhe
        5
    donghouhe  
       2015 年 5 月 8 日 via Android
    已经star!
    redhatping
        6
    redhatping  
       2015 年 5 月 8 日 via iPhone
    很好,想一起做
    holinhot
        7
    holinhot  
       2015 年 5 月 8 日
    看着不错。可以改成其他系统了
    eeeeeeve
        8
    eeeeeeve  
       2015 年 5 月 8 日
    @phithon 表示没有看到面包屑,面包屑在哪里?
    phithon
        9
    phithon  
    OP
       2015 年 5 月 8 日
    @eeeeeeve 额我错了,并不是面包屑,就是标题“福利の社”下面,4个按钮就是板块拉
    LINAICAI
        10
    LINAICAI  
       2015 年 5 月 8 日
    挺喜欢这种列表的。。。做blog也可以
    jiang42
        11
    jiang42  
       2015 年 5 月 8 日
    @phithon 已star,虽然我不是处女座,但是我也容不下半个warning,用C的时候编译都是要开Werror选项的
    eeeeeeve
        12
    eeeeeeve  
       2015 年 5 月 8 日
    @phithon 没有看到按钮啊。。。motor是干啥的?
    myoula
        13
    myoula  
       2015 年 5 月 8 日
    star一个
    tpircsboy
        14
    tpircsboy  
       2015 年 5 月 8 日 via Android
    @phithon 已star,我最近在学习tornado,我有个疑问,就是富文本过滤会用到HTMLparser, re,这些还挺耗时,会不会阻塞请求?(说阻塞好像不合适
    yizi
        15
    yizi  
       2015 年 5 月 8 日
    已star,刚好最近想了解一下社区的搭建~
    bigzhu
        16
    bigzhu  
       2015 年 5 月 8 日
    如果是用 postgresql ,我还真想哪来用在一个项目里面.
    nevernet
        17
    nevernet  
       2015 年 5 月 8 日
    ```
    yield self.message(fromuser=None, touser=post["user"], cOntent=content,
    jump="/post/%s" % id)
    ```

    yield怎么理解?
    sevncz
        18
    sevncz  
       2015 年 5 月 8 日
    学习下,已star
    RIcter
        19
    RIcter  
       2015 年 5 月 8 日
    膜拜大牛
    dbas
        20
    dbas  
       2015 年 5 月 8 日
    收集,,一定会使用!~
    dbas
        21
    dbas  
       2015 年 5 月 8 日
    注册了个号用了一下,,,如果我说有些地方体验不好,你会不会打我...
    真心有的地方要改进

    好吧,我也无聊:
    比如:
    http://waf.science/post/554c19c49713966344c09f45
    我想回到这个话题的分类列表,这个东西显示在admin 发表于 15天前 ""社区公告""...最少这个返回让我找了几分钟
    回复信息中的验证码要再简单点..录入成本太大.
    提交按钮要再明显一点...
    northisland
        22
    northisland  
       2015 年 5 月 8 日
    哇,基于Tornado,好喜欢=_=
    ob
        23
    ob  
       2015 年 5 月 8 日
    Amaze UI
    phithon
        24
    phithon  
    OP
       2015 年 5 月 8 日
    @dbas
    就是需要这样的反馈呀,否则我都不知道哪些地方要改,感谢啦~
    phithon
        25
    phithon  
    OP
       2015 年 5 月 8 日
    @eeeeeeve motor是基于tornado的一个非阻塞Mongodb客户端库
    phithon
        26
    phithon  
    OP
       2015 年 5 月 8 日
    @tpircsboy
    这个耗时间我没具体测试过,可以测试一下。
    如果比较耗时的话,可以放在backend让tornado后台的线程去执行。minos里bcrypt加密就是一个耗时操作,我就给backend处理了~
    powtop
        27
    powtop  
       2015 年 5 月 8 日
    来个wooyun邀请码 嘿嘿
    phithon
        28
    phithon  
    OP
       2015 年 5 月 8 日
    @nevernet 因为self.message是一个非阻塞的函数,所以用yield让流程回归tornado的IO中,等执行完了返回了再往下进行。我是这个理解,不过具体也不太懂呀。。。
    zhouquanbest
        29
    zhouquanbest  
       2015 年 5 月 8 日
    被MongoDB坑过几次后
    现在看到只用Mongo的就有点没底
    popu111
        30
    popu111  
       2015 年 5 月 8 日
    star之~
    Coyote
        31
    Coyote  
       2015 年 5 月 8 日
    @phithon 请问作者有兴趣加入到PyChina社区嘛, 加wechat or qq : 690062809 细聊

    官方blog地址: http://pychina.org/

    官方大会地址: http://cn.pycon.org/

    发起人为 @ZoomQuiet
    phithon
        32
    phithon  
    OP
       2015 年 5 月 8 日
    @Coyote 加啦,了解一下~
    ikaros
        33
    ikaros  
       2015 年 5 月 8 日   1
    第100个star
    daiv
        34
    daiv  
       2015 年 5 月 8 日
    @ikaros 第109个star
    cute
        35
    cute  
       2015 年 5 月 8 日
    第120个star
    xixijun
        36
    xixijun  
       2015 年 5 月 9 日
    第133个star~
    saber000
        38
    saber000  
       2015 年 5 月 9 日
    @saber000 缩进不对啊啊啊啊啊,强迫症犯了啊啊啊啊啊啊
    vsill
        39
    vsill  
       2015 年 5 月 9 日 via Android
    网站打开速度很slow
    phithon
        40
    phithon  
    OP
       2015 年 5 月 9 日
    @saber000 下下来就对了
    phithon
        41
    phithon  
    OP
       2015 年 5 月 9 日
    @vsill 奇怪,我这边秒开呀。。。
    fy
        42
    fy  
       2015 年 5 月 9 日
    O,O LZ做得好!我已经star了。

    @phithon 听说LZ是处女座,话说我会告诉你其实有很多TAB和空格混用吗!

    另外貌似没有外加模板引擎,现在tornado本身的模板引擎足够好用了吗?

    我不喜欢mongodb,或许有一天会fork一下并做合我胃口的改动。因为是MPL所以我会重写整个项目……不过申请向LZ抄袭模板代码!!!实在是写不动前端啊!
    saber000
        43
    saber000  
       2015 年 5 月 9 日
    @fy 我也在吐槽TAB和空格混用啊啊啊啊啊啊啊啊
    phithon
        44
    phithon  
    OP
       2015 年 5 月 9 日
    @fy @saber000
    唉实话说处女座只是说说,并没有洁癖。
    混用原因有两个,编辑器可能有一部分,然后大部分地方是因为我拷贝了一些别人的代码片段。
    我是一直用的tab,不影响使用我就不管混用不混用的问题了~
    saber000
        45
    saber000  
       2015 年 5 月 9 日
    @phithon 个人的一个习惯是设置git的pre-commit hook来跑pep8,pylint,unittest来规范代码.
    pylint绝逼是处女座写的.
    imlonghao
        46
    imlonghao  
       2015 年 5 月 10 日 via Android
    看到了zone好评
    Feiox
        47
    Feiox  
       2015 年 5 月 10 日
    看了些代码。虽然 LZ 设为处女座,但。。。。。。(表打我)
    !!!代码规范性欠佳啊,并且很多地方欠 Pythonic。对于 ` i ` 这样的文件夹名。。。。。
    phithon
        48
    phithon  
    OP
       2015 年 5 月 10 日
    @Feiox 规范性求意见呀,我不是专业程序员。处女座真的只是开玩笑。。。i是amazeui自带的文件夹名字,我就没改了……
    lhy360121
        49
    lhy360121  
       2015 年 5 月 11 日
    有些代码是缩进4个空格,有些缩进则是8个空格,tab键滥用。。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5510 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 41ms UTC 09:08 PVG 17:08 LAX 01:08 JFK 04:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86