正在做一个完整的Django用户系统app,欢迎大家贡献代码 - 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
yueyoum
V2EX    Python

正在做一个完整的Django用户系统app,欢迎大家贡献代码

  •  
  •   yueyoum
    yueyoum 2013-06-12 23:36:21 +08:00 18100 次点击
    这是一个创建于 4563 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://github.com/yueyoum/django-siteuser

    目标就是在写新站点的时候,不用再在用户系统上浪费时间

    具体说明可以看github,

    欢迎大家提建议,fork & pull request
    第 1 条附言    2013-06-21 23:54:21 +08:00
    已经完成基本功能 发布了 0.1.0 版

    现在可以用 pip 安装

    pip install django-siteuser
    41 条回复    1970-01-01 08:00:00 +08:00
    nick32m
        1
    nick32m  
       2013-06-13 11:10:05 +08:00
    顶一下
    jinbakei
        2
    jinbakei  
       2013-06-13 11:14:43 +08:00   1
    加油!有用!
    niko
        3
    niko  
       2013-06-13 12:21:05 +08:00
    这个支持一下~正在用java写,呵呵
    kk71
        4
    kk71  
       2013-06-13 15:12:05 +08:00
    啊啊好东西!
    llbgurs
        5
    llbgurs  
       2013-06-13 20:58:51 +08:00
    开源什么许可?
    okidogi
        6
    okidogi  
       2013-06-13 21:24:28 +08:00
    这个系统完全可以将 django-registration, django-profile, django-social-auth, django-avatar 组合起来,改改template就行了。重复开发费时费力的。

    或者直接用pinax, https://github.com/pinax/pinax
    yueyoum
        7
    yueyoum  
    OP
       2013-06-13 22:54:22 +08:00   1
    @okidogi
    恩, 经常逛github 你说的那些我也知道,但并不是我想要的。
    虽然这些我没用过, 但看源码发现了这些问题

    django-registration 使用了django内建的 auth.User 因为admin用户也在这个表中,我个人不喜欢将普通用户与管理员帐号放到一张表中

    django-profile 也是同样的使用了 auth.User

    django-social-auth 到是可以自己指定user表,但其自身并不是面向中国大陆的,所以,其自身只提供了 豆瓣和新浪微博 的认证。
    而我自己有一个 socialoauth 库, 支持了大陆8大网站的认证, 所以这块还是自己做的方便。

    django-avatar 是一个用户可以有多个头像,这种我觉得不需要,而且大陆网站似乎很少提供这种让用户传多个头像,然后想换的时候就换的功能,所以新建立的面向大陆用户的网站还是保持一个用户一个头像的好

    好像django-profile 也可以上传头像,
    但这两个上传的效果如何,并不知道。

    我也有一个 django-upload-avatar ,它更符合国人的使用习惯, 选择图片后可以剪裁预览。

    并且,我现在这个项目是完完全全面向国内网站的,所以内部直接用了汉字。没用i18n,
    django在关闭 I18N的情况下,性能有少许提升

    可以参考它们的代码,但如果学习一个库的代价远远大于自己实现的时候, 还不如自己直接实现来的好。
    yueyoum
        8
    yueyoum  
    OP
       2013-06-13 22:55:53 +08:00
    @llbgurs
    BSD 等项目完成后, 会放上 LICENSE
    moyaya
        9
    moyaya  
       2013-06-13 22:56:26 +08:00
    这个非常的支持,当初我们开发这个花了不少时间。
    yueyoum
        10
    yueyoum  
    OP
       2013-06-13 22:59:06 +08:00
    @moyya
    啊, 方便的话,就放到github上, 好让我去围观下
    soli
        11
    soli  
       2013-06-13 23:04:58 +08:00
    感兴趣。围观。
    metaclass
        12
    metaclass  
       2013-06-14 00:02:12 +08:00
    你这个说是不重新发明轮子,其实是自己发明了一套轮子……不过Django 1.5开始支持自定义用户系统了,只要按照它的规范做好几个需要的东西,别的app都能兼容

    简单看了下代码,还是比较规范的。支持!另外建议项目语言搞成英文的,这样参与者更多
    metaclass
        13
    metaclass  
       2013-06-14 00:05:21 +08:00
    @yueyoum 你可以看看django-userena和django-allauth,我两个项目分别用了它们。django-allauth是集成了local用户系统和social用户系统,其social用户系统可以挂载多个账户。代码质量上django-userena高一些,django-allauth的比较山寨,供你参考
    yueyoum
        14
    yueyoum  
    OP
       2013-06-14 10:18:59 +08:00
    @metaclass 好,我研究下 userena
    yueyoum
        15
    yueyoum  
    OP
       2013-06-15 23:13:53 +08:00
    今天把 修改/重置 密码的功能加上了。
    现在 用户系统 本身 的功能基本完成了。

    下面就是 完善 ,并且再加上 通知系统
    coosir
        16
    coosir  
       2013-06-16 09:17:45 +08:00 via Android
    不错 其实我想问有没有php版类似的东东
    risent
        17
    risent  
       2013-06-16 13:59:01 +08:00
    好奇一下问什么要重写一个send_mail? 如果用Django自带的mail系统,只需settins.py里配置个不同的backend(比如django-celery-email)就可以实现邮件的异步发送了.
    yueyoum
        18
    yueyoum  
    OP
       2013-06-16 14:10:04 +08:00
    @risent 你说的对, 我那个自己写的send_mail只是暂时之举,最后会替换掉的。
    risent
        19
    risent  
       2013-06-16 14:24:56 +08:00
    @yueyoum 顺便问下楼主如果遇到一个project下的apps太多,导致user字段过多的时候,想把apps分到不同的project下面去的时候,这个user系统怎么处理比较好?
    yueyoum
        20
    yueyoum  
    OP
       2013-06-16 20:13:34 +08:00
    @risent
    没明白你的问题

    apps 多少 和 user字段有必要联系?
    如果一个app干的事情和 user 本身没丝毫关系, 那它不会给user增加字段的。

    我的理解是一个站点一个project, 不同的project就是不同的站点的。

    或者你举个例子,我看看你说的是哪种情况
    risent
        21
    risent  
       2013-06-17 02:06:05 +08:00
    @yueyoum 比如我要做个站点,这个站点包括 商城,论坛,问答这几个系统(陆续还会有新的系统添加),然后每个系统都会有相应的积分,等级,签名等直接添加到User上面的字段,如果不添加到User上面,操作起来会很麻烦,这个时候User上面的字段就会太多.我的想法是把各个系统独立开来,但是这个时候用户的同步就不好处理.
    yueyoum
        22
    yueyoum  
    OP
       2013-06-17 12:05:20 +08:00
    @risent
    似乎明白你说的了, 系统归系统,我的理解是 这些系统是一个一个的app,而不是project
    现在很多 reusable app 的通用做法就是 让你指定你的 user model, 如果你没指定,默认就是 'auth.User'

    然后他们就会这么用:

    user_model = getattr(settings, 'USER_MODEL', None) or 'auth.User'
    class User(models.Model):
    user = models.OneToOneField(user_model, related_name='xxx')
    # 其他字段,比如 积分,等级

    如果每个app都有上面的操作, 从实现上讲,确实可以达到给user添加字段的效果,并且也能正常工作。

    但这个问题就是 性能问题, 取一个user信息,可能也会带着 多表join.

    这也是我做 django-siteuser的一个原因, 直接把user本身信息放入一个表,而不是引入很多app,做很多join查询。

    如果 商城,论坛 这些app 有现成的第三方的, 我建议可以修改一下, 把它们的user表直接提出来,做成一个。

    虽然user上面的字段变多了,但是不会有太多join的情况了
    这种时候 各个系统任然是独立的, 只是 user共用一个而已
    yueyoum
        23
    yueyoum  
    OP
       2013-06-21 23:54:02 +08:00
    已经完成基本功能 发布了 0.1.0 版

    现在可以用 pip 安装

    pip install django-siteuser
    iiduce
        24
    iiduce  
       2013-06-21 23:59:42 +08:00
    @yueyoum 0.1版完成了“功能列表”里的哪些功能?
    yueyoum
        25
    yueyoum  
    OP
       2013-06-22 00:34:30 +08:00
    @iiduce
    除了消息系统 可能不够通用外,
    其他的都完成了,

    但在使用siteuser的时候 可以不使用notify系统
    leejaen
        26
    leejaen  
       2013-06-28 10:01:01 +08:00
    @yueyoum
    这个系统是跟social oauth一起用的吗?昨天没找到social oauth在django的具体用法,回复到你的微博了……
    yueyoum
        27
    yueyoum  
    OP
       2013-06-28 10:30:43 +08:00
    @leejaen
    幸亏你在这里回复下, 我一个月也就上几次weibo

    socialoauth 和 django 集成的例子的你可以看这个 repo
    https://github.com/yueyoum/django-social-login

    但这个已经被我废弃掉了,

    其实 siteuser 这个项目里 更好的展示了 socialoauth 如何与django的结合,
    自身注册用户如何和第三方登陆用户共存。

    就在 siteuser.users 这个app 中
    yueyoum
        28
    yueyoum  
    OP
       2013-06-28 10:44:56 +08:00
    @leejaen
    看到 weibo 留言了,

    如果你不喜欢讲注册用户放入 django自己的用户系统,
    刚好我这个项目就是这样的, 因为我同样不喜欢。

    你可以 看看 siteuser 的 README, 然后先不要设置 USING_SOCIAL_LOGIN
    这样它默认为 False ,不启用 第三方登陆, 这样你就不用设置 SOCIALOAUTH_SITES 这个给 socialoauth 使用的配置了。 因为要设置这个,你需要到第三方网站上去申请开发者,有点麻烦

    先把 siteuser 自身注册,登陆 跑一边,熟悉整个流程后,
    再去 到weibo,豆瓣,QQ 等网站申请开发者,得到key之类的信息,就可以 设置 SOCIALOAUTH_SITES, 然后 在settings.py 中 设置 USING_SOCIAL_LOGIN = True

    然后再体验一下 第三方登陆, 这块可能会遇到不较多的问题,
    需要你也要稍微熟悉一下 OAuth2 的流程。

    需要注意的是你需要在 第三方网站申请为开发者后,要设置 OAuth认证完毕后的回调地址,

    回调地址的形式是 account/oauth/<sitename>

    这个sitename 又是和 SOCIALOAUTH_SITES 里想对应的,
    也就是 如果 SOCIALOAUTH_SITES 里设置了一个名为 weibo 站点的配置,
    那么 你在 新浪开发者的设置中 就要把你的回调地址写成 <URL>/account/oauth/weibo

    <URL> 是你申请网站接入是填写的url

    最好你在本地搭建开发环境的时候,需要在 hosts 中 将 <URL> 指向 127.0.0.1
    然后 开启 nginx ,或者 你直接 让django server 监听在80端口也行
    leejaen
        29
    leejaen  
       2013-06-28 12:42:24 +08:00
    @yueyoum
    这么详细的回复让我有些小感动,oauth我之前弄过微博的,后来想添加腾讯和豆瓣,这个功能不算是最重要的却占很多开发时间,有些本末倒置的感觉,所以查到了你的项目,我先研究下使用方法,通了后我要做第一个吃螃蟹的人。很看好你这个项目。我先fork下
    leejaen
        30
    leejaen  
       2013-06-28 16:13:06 +08:00
    @yueyoum
    今天把项目pull下来爽了一下,但现在我有个新的疑问:django-siteuser用户系统可不可以和原来的admin用户系统并存,可以的话怎么配置。现在在配置的urls里打开adminsite(admin.autodiscover())就会出错,我原本想是网站的用户单独一套系统,后台管理员使用admin site。想问下可不可以达到这个需求?万分感谢
    yueyoum
        31
    yueyoum  
    OP
       2013-06-28 16:23:15 +08:00
    @leejaen
    无需任何配置, siteuser 和 admin 是分离的, 你直接在 clone 出了 example 里 仅仅 admin.autodiscover() 肯定要报错

    因为 example 没有开启 admin

    你看看 settings.py, middleware 和 install_apps 都把 admin 关了,
    你把和 admin 有关的配置开启后, 再次执行 python manage.py syncdb 这时候就要你设置管理员账号了
    leejaen
        32
    leejaen  
       2013-07-01 12:38:58 +08:00
    @yueyoum
    我是在原来开发的项目里加入的siteuser app,按步骤配置完成后出错,上午重新配置下可以了,确实是配置的问题,Thank you! 此外还发现关于版本的两处地方:1. django-siteuser里代码是1.5版本,尤其是url tags 的写法,{% url 'url_name' %} 和 {% url url_name %} 新手表示在1.4里不容易找到,readme里没有标明。2. settings里SITEUSER_EMAIL没有配置的话会出现错误'Settings' object has no attribute 'SITEUSER_EMAIL',是不是1.5里不用配置时以空识别此值的?
    yueyoum
        33
    yueyoum  
    OP
       2013-07-01 12:50:51 +08:00
    @leejaen

    我在1.5的测试的, 所以 url 不同版本的问题,这个我确实不太清楚,

    SITEUSER_EMAIL 这块我偷懒了,没在README里写
    https://github.com/yueyoum/django-siteuser/blob/master/siteuser/functional/__init__.py

    发邮件我没用django 自身的EMAIL设置, 而是自己写的
    我晚上回去把这部分的README 补上。

    你暂时可以随便写个 SITEUSER_EMAIL, 这样,demo可以跑起来,只是修改密码,重置密码发邮件的功能不可用
    yueyoum
        34
    yueyoum  
    OP
       2013-07-02 00:23:02 +08:00   1
    @leejaen
    我把 SITEUSER_EMAIL 的 说明添加到了 README 中, 示例添加到了 example/example/local_settings.py.example 中了


    写文档真是个耐心+体力活啊……
    leejaen
        35
    leejaen  
       2013-07-02 10:29:02 +08:00
    @yueyoum
    看到了,很清晰,一眼即明,赞一个
    leejaen
        36
    leejaen  
       2013-07-04 15:59:29 +08:00
    @yueyoum
    上传图片那里在python2.7+django1.4里会有上传后的文件损坏的情况发生,导致读取时发生错误,不知道是不是python版本的问题还是avatar应用没有配置好的原因。
    具体代码在\siteuser\upload_avatar\views.py文件中的upload_avatar方法的Image.open(fpath)会抛出异常,上传后的图片在windows里出现马赛克花图效果。
    yueyoum
        38
    yueyoum  
    OP
       2013-07-04 16:59:26 +08:00   1
    @leejaen

    https://github.com/yueyoum/django-siteuser/blob/master/siteuser/upload_avatar/views.py#L77

    看view.py 77行, open(fpath, 'w')

    因为我一直在linux中,所以忽略了 open 模式在 linux 和windows 中的不同

    'w' 是以文本形式打开文件, 'wb' 是二进制方式, 这个在windows上是不同的,
    但linux中是一样的, 所以我写的是 'w'

    你改成 'wb' 试试?
    leejaen
        39
    leejaen  
       2013-07-04 17:23:40 +08:00
    @yueyoum
    欧了,我怎么就没想到,还是对linux不太熟悉的原因,要赶紧的装个ubuntu了
    leejaen
        40
    leejaen  
       2013-07-18 15:29:13 +08:00
    @yueyoum 发现了一个用户登录时的bug,已经提交到github
    yueyoum
        41
    yueyoum  
    OP
       2013-07-18 17:22:29 +08:00
    @leejaen 已经merge 了。 Thanks :-)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3913 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 05:24 PVG 13:24 LAX 21:24 JFK 00:24
    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