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
V2EX  ›  Python

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

  •  1
     
  •   phithon ·
    phith0n · 2015-05-07 23:09:27 +08:00 · 8600 次点击
    这是一个创建于 3487 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    yield怎么理解?
    sevncz
        18
    sevncz  
       2015-05-08 10:38:50 +08:00
    学习下,已star
    RIcter
        19
    RIcter  
       2015-05-08 10:43:10 +08:00
    膜拜大牛
    dbas
        20
    dbas  
       2015-05-08 10:44:07 +08:00
    收集,,一定会使用!~
    dbas
        21
    dbas  
       2015-05-08 11:00:40 +08:00
    注册了个号用了一下,,,如果我说有些地方体验不好,你会不会打我...
    真心有的地方要改进

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

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

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

    发起人为 @ZoomQuiet
    phithon
        32
    phithon  
    OP
       2015-05-08 13:37:28 +08:00
    @Coyote 加啦,了解一下~
    ikaros
        33
    ikaros  
       2015-05-08 14:15:08 +08:00   ❤️ 1
    第100个star
    daiv
        34
    daiv  
       2015-05-08 15:16:55 +08:00
    @ikaros 第109个star
    cute
        35
    cute  
       2015-05-08 18:44:20 +08:00
    第120个star
    xixijun
        36
    xixijun  
       2015-05-09 00:46:35 +08:00
    第133个star~
    saber000
        37
    saber000  
       2015-05-09 01:47:49 +08:00
    saber000
        38
    saber000  
       2015-05-09 01:48:22 +08:00
    @saber000 缩进不对啊啊啊啊啊,强迫症犯了啊啊啊啊啊啊
    vsill
        39
    vsill  
       2015-05-09 09:31:14 +08:00 via Android
    网站打开速度很slow
    phithon
        40
    phithon  
    OP
       2015-05-09 10:58:24 +08:00
    @saber000 下下来就对了
    phithon
        41
    phithon  
    OP
       2015-05-09 10:58:41 +08:00
    @vsill 奇怪,我这边秒开呀。。。
    fy
        42
    fy  
       2015-05-09 14:53:45 +08:00
    O,O LZ做得好!我已经star了。

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

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

    我不喜欢mongodb,或许有一天会fork一下并做合我胃口的改动。因为是MPL所以我会重写整个项目……不过申请向LZ抄袭模板代码!!!实在是写不动前端啊!
    saber000
        43
    saber000  
       2015-05-09 17:07:38 +08:00
    @fy 我也在吐槽TAB和空格混用啊啊啊啊啊啊啊啊
    phithon
        44
    phithon  
    OP
       2015-05-09 17:32:38 +08:00
    @fy @saber000
    唉实话说处女座只是说说,并没有洁癖。
    混用原因有两个,编辑器可能有一部分,然后大部分地方是因为我拷贝了一些别人的代码片段。
    我是一直用的tab,不影响使用我就不管混用不混用的问题了~
    saber000
        45
    saber000  
       2015-05-09 18:02:56 +08:00
    @phithon 个人的一个习惯是设置git的pre-commit hook来跑pep8,pylint,unittest来规范代码.
    pylint绝逼是处女座写的.
    imlonghao
        46
    imlonghao  
       2015-05-10 07:03:43 +08:00 via Android
    看到了zone好评
    Feiox
        47
    Feiox  
       2015-05-10 11:18:10 +08:00
    看了些代码。虽然 LZ 设为处女座,但。。。。。。(表打我)
    !!!代码规范性欠佳啊,并且很多地方欠 Pythonic。对于 ` i ` 这样的文件夹名。。。。。
    phithon
        48
    phithon  
    OP
       2015-05-10 12:49:06 +08:00
    @Feiox 规范性求意见呀,我不是专业程序员。处女座真的只是开玩笑。。。i是amazeui自带的文件夹名字,我就没改了……
    lhy360121
        49
    lhy360121  
       2015-05-11 11:34:21 +08:00
    有些代码是缩进4个空格,有些缩进则是8个空格,tab键滥用。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2661 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 05:33 · PVG 13:33 · LAX 21:33 · JFK 00:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.