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

2013-06-12 23:36:21 +08:00
 yueyoum
https://github.com/yueyoum/django-siteuser

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

具体说明可以看github,

欢迎大家提建议,fork & pull request
17558 次点击
所在节点    Python
41 条回复
risent
2013-06-17 02:06:05 +08:00
@yueyoum 比如我要做个站点,这个站点包括 商城,论坛,问答这几个系统(陆续还会有新的系统添加),然后每个系统都会有相应的积分,等级,签名等直接添加到User上面的字段,如果不添加到User上面,操作起来会很麻烦,这个时候User上面的字段就会太多.我的想法是把各个系统独立开来,但是这个时候用户的同步就不好处理.
yueyoum
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
2013-06-21 23:54:02 +08:00
已经完成基本功能 发布了 0.1.0 版

现在可以用 pip 安装

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

但在使用siteuser的时候 可以不使用notify系统
leejaen
2013-06-28 10:01:01 +08:00
@yueyoum
这个系统是跟social oauth一起用的吗?昨天没找到social oauth在django的具体用法,回复到你的微博了……
yueyoum
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
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
2013-06-28 12:42:24 +08:00
@yueyoum
这么详细的回复让我有些小感动,oauth我之前弄过微博的,后来想添加腾讯和豆瓣,这个功能不算是最重要的却占很多开发时间,有些本末倒置的感觉,所以查到了你的项目,我先研究下使用方法,通了后我要做第一个吃螃蟹的人。很看好你这个项目。我先fork下
leejaen
2013-06-28 16:13:06 +08:00
@yueyoum
今天把项目pull下来爽了一下,但现在我有个新的疑问:django-siteuser用户系统可不可以和原来的admin用户系统并存,可以的话怎么配置。现在在配置的urls里打开adminsite(admin.autodiscover())就会出错,我原本想是网站的用户单独一套系统,后台管理员使用admin site。想问下可不可以达到这个需求?万分感谢
yueyoum
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
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
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
2013-07-02 00:23:02 +08:00
@leejaen
我把 SITEUSER_EMAIL 的 说明添加到了 README 中, 示例添加到了 example/example/local_settings.py.example 中了


写文档真是个耐心+体力活啊……
leejaen
2013-07-02 10:29:02 +08:00
@yueyoum
看到了,很清晰,一眼即明,赞一个
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里出现马赛克花图效果。
leejaen
2013-07-04 16:01:23 +08:00
yueyoum
2013-07-04 16:59:26 +08:00
@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
2013-07-04 17:23:40 +08:00
@yueyoum
欧了,我怎么就没想到,还是对linux不太熟悉的原因,要赶紧的装个ubuntu了
leejaen
2013-07-18 15:29:13 +08:00
@yueyoum 发现了一个用户登录时的bug,已经提交到github

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/72177

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX