1
nick32m 2013-06-13 11:10:05 +08:00
顶一下
|
2
jinbakei 2013-06-13 11:14:43 +08:00 1
加油!有用!
|
3
niko 2013-06-13 12:21:05 +08:00
这个支持一下~正在用java写,呵呵
|
4
kk71 2013-06-13 15:12:05 +08:00
啊啊好东西!
|
5
llbgurs 2013-06-13 20:58:51 +08:00
开源什么许可?
|
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 |
7
yueyoum OP @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的情况下,性能有少许提升 可以参考它们的代码,但如果学习一个库的代价远远大于自己实现的时候, 还不如自己直接实现来的好。 |
9
moyaya 2013-06-13 22:56:26 +08:00
这个非常的支持,当初我们开发这个花了不少时间。
|
11
soli 2013-06-13 23:04:58 +08:00
感兴趣。围观。
|
12
metaclass 2013-06-14 00:02:12 +08:00
你这个说是不重新发明轮子,其实是自己发明了一套轮子……不过Django 1.5开始支持自定义用户系统了,只要按照它的规范做好几个需要的东西,别的app都能兼容
简单看了下代码,还是比较规范的。支持!另外建议项目语言搞成英文的,这样参与者更多 |
13
metaclass 2013-06-14 00:05:21 +08:00
@yueyoum 你可以看看django-userena和django-allauth,我两个项目分别用了它们。django-allauth是集成了local用户系统和social用户系统,其social用户系统可以挂载多个账户。代码质量上django-userena高一些,django-allauth的比较山寨,供你参考
|
15
yueyoum OP 今天把 修改/重置 密码的功能加上了。
现在 用户系统 本身 的功能基本完成了。 下面就是 完善 ,并且再加上 通知系统 |
16
coosir 2013-06-16 09:17:45 +08:00 via Android
不错 其实我想问有没有php版类似的东东
|
17
risent 2013-06-16 13:59:01 +08:00
好奇一下问什么要重写一个send_mail? 如果用Django自带的mail系统,只需settins.py里配置个不同的backend(比如django-celery-email)就可以实现邮件的异步发送了.
|
19
risent 2013-06-16 14:24:56 +08:00
@yueyoum 顺便问下楼主如果遇到一个project下的apps太多,导致user字段过多的时候,想把apps分到不同的project下面去的时候,这个user系统怎么处理比较好?
|
20
yueyoum OP @risent
没明白你的问题 apps 多少 和 user字段有必要联系? 如果一个app干的事情和 user 本身没丝毫关系, 那它不会给user增加字段的。 我的理解是一个站点一个project, 不同的project就是不同的站点的。 或者你举个例子,我看看你说的是哪种情况 |
21
risent 2013-06-17 02:06:05 +08:00
@yueyoum 比如我要做个站点,这个站点包括 商城,论坛,问答这几个系统(陆续还会有新的系统添加),然后每个系统都会有相应的积分,等级,签名等直接添加到User上面的字段,如果不添加到User上面,操作起来会很麻烦,这个时候User上面的字段就会太多.我的想法是把各个系统独立开来,但是这个时候用户的同步就不好处理.
|
22
yueyoum OP @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共用一个而已 |
23
yueyoum OP 已经完成基本功能 发布了 0.1.0 版
现在可以用 pip 安装 pip install django-siteuser |
25
yueyoum OP |
26
leejaen 2013-06-28 10:01:01 +08:00
@yueyoum
这个系统是跟social oauth一起用的吗?昨天没找到social oauth在django的具体用法,回复到你的微博了…… |
27
yueyoum OP @leejaen
幸亏你在这里回复下, 我一个月也就上几次weibo socialoauth 和 django 集成的例子的你可以看这个 repo https://github.com/yueyoum/django-social-login 但这个已经被我废弃掉了, 其实 siteuser 这个项目里 更好的展示了 socialoauth 如何与django的结合, 自身注册用户如何和第三方登陆用户共存。 就在 siteuser.users 这个app 中 |
28
yueyoum OP @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端口也行 |
29
leejaen 2013-06-28 12:42:24 +08:00
@yueyoum
这么详细的回复让我有些小感动,oauth我之前弄过微博的,后来想添加腾讯和豆瓣,这个功能不算是最重要的却占很多开发时间,有些本末倒置的感觉,所以查到了你的项目,我先研究下使用方法,通了后我要做第一个吃螃蟹的人。很看好你这个项目。我先fork下 |
30
leejaen 2013-06-28 16:13:06 +08:00
@yueyoum
今天把项目pull下来爽了一下,但现在我有个新的疑问:django-siteuser用户系统可不可以和原来的admin用户系统并存,可以的话怎么配置。现在在配置的urls里打开adminsite(admin.autodiscover())就会出错,我原本想是网站的用户单独一套系统,后台管理员使用admin site。想问下可不可以达到这个需求?万分感谢 |
31
yueyoum OP @leejaen
无需任何配置, siteuser 和 admin 是分离的, 你直接在 clone 出了 example 里 仅仅 admin.autodiscover() 肯定要报错 因为 example 没有开启 admin 你看看 settings.py, middleware 和 install_apps 都把 admin 关了, 你把和 admin 有关的配置开启后, 再次执行 python manage.py syncdb 这时候就要你设置管理员账号了 |
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里不用配置时以空识别此值的? |
33
yueyoum OP @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可以跑起来,只是修改密码,重置密码发邮件的功能不可用 |
34
yueyoum OP @leejaen
我把 SITEUSER_EMAIL 的 说明添加到了 README 中, 示例添加到了 example/example/local_settings.py.example 中了 写文档真是个耐心+体力活啊…… |
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里出现马赛克花图效果。 |
37
leejaen 2013-07-04 16:01:23 +08:00
|
38
yueyoum OP @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' 试试? |