1
talentsnail 2012-12-15 19:30:19 +08:00
只保存你的users表中已有的字段信息,再给users表加上一个用户来源的字段,本站注册的为0,豆瓣1,微博2……
这样可以不? |
2
paloalto OP @talentsnail 是个解决办法。等我找找看还有没有其他的方案。。
|
3
ksky 2012-12-15 19:38:01 +08:00
给豆瓣用户创建一个新用户在你之前的用户表里通用信息存一起,然后关联到新的豆瓣用表里。
|
4
paloalto OP @ksky 你的意思是说把 usename \ nickname 等通用信息都存到users表,把其他豆瓣独有的字段存到douban_users表,两张表通过某个共有的字段关联起来,是这样吗?
|
5
ksky 2012-12-15 22:49:39 +08:00 1
@paloalto 我的意思是,你还是用一个表来查询所有用户,如果你想要完整的豆瓣用户的资料就单独建表存储,在users表里加字段关联起来就行了。以后加新浪微博登录也可以同样处理。
|
6
ergatea 2012-12-16 01:32:16 +08:00
base user
(key username、email、nickname、password ) douban user info (base user key ...) |
7
paloalto OP 感谢
@ergatea @ksky @talentsnail 三位的解答。 我打算综合三位的方案, users 表中增加一个来源字段,原始注册是0,豆瓣是1,新浪是2...主要是考虑到这样,就可以根据来源字段来判断需要是否需要拼接头像的连接地址,比较方便一些。因为原始注册时,我是在 users 的 avatarPath 字段里存了部分路径,需要调用头像时就在前端拼接: $if user.avatarPath: ----$ src = '/static/upload/image' + user.avatarPath + '_48.jpg' ----<img src="$src" width="30" alt="$user.nickname" /> $else: ----<img src="/static/public/img/default_48x48.jpg" width="30" alt="$user.nickname" /> 以后再加一个判断就可以了: $if user.avatarPath: ----$if user.via == 0 #原始注册 --------$ src = '/static/upload/image' + user.avatarPath + '_48.jpg' --------<img src="$src" width="30" alt="$user.nickname" /> ----$if user.via == 1 #豆瓣 --------$ src = user.avatarPath --------<img src="$src" width="30" alt="$user.nickname" /> $else: ----<img src="/static/public/img/default_48x48.jpg" width="30" alt="$user.nickname" /> 另外,把豆瓣的uid 当做 username,nickname = nickname,存储到users表中,其他的个人简介和常居地什么的就放到原先的 profile 表中,因为之前 users 和 profile 俩表就是关联的。 这样就不用再新建一个douban_users表,全部通过一个 users 表来实现了。 |
8
ergatea 2012-12-16 22:29:21 +08:00 1
擴展你的 user class 添加 get_avatar 方法,把你的邏輯寫在裏面,至於表結構合方式都是可以接受的,都可以,關於 get 過來的 api 數據,本人不建議大量存儲關係數據庫,存放cache系統應該可以滿足你的需求了。
下面是我的model代碼, accesstoken表主要就是存儲用戶的api信息。 ====== class AccessToken(db.Model): __tablename__ = 'accesstoken' id = db.Column(db.Integer, primary_key = True) email = db.Column(db.String(100)) service = db.Column(db.String(50)) token = db.Column(db.String) token_secret = db.Column(db.String) class User(db.Model): __tablename__ = 'users' id = db.Column(db.String(40), primary_key=True) email = db.Column(db.String(100), unique=True) username = db.Column(db.String(50), unique=True) password = db.Column(db.String(40)) activate = db.Column(db.Boolean) join_date = db.Column(db.DateTime) tags = db.relationship('Tag', secondary=book_tag, backref=db.backref('users', lazy='dynamic')) class Profile(db.Model): pass |
9
paloalto OP @ergatea 谢谢你的回答!另外问一个问题,从豆瓣过来的用户的用户名可能会跟我网站中的用户名有重复,所以我想在存储豆瓣用户的数据之前,先检查一下数据库中是否已经存在有相同的用户名了,如果有,就给新用户的用户名后面加一个后缀“_1”。
#判断username是否有重名 if not users.is_username_available(username): ----username = username + '_1' 但是这样只能顶一次用。比如: 用户在豆瓣的用户名是 ahbei ,恰巧我的网站中也有一个 ahbei 。按照上面的代码,这位新用户用豆瓣登录后,存储在数据库中的用户名会变成 ahbei_1;但是如果后来又有一个叫 ahbei_1 的豆瓣用户过来了,按照上面的程序,这位用户的用户名就会变成 ahbei_1_1。 —— 但其实我是想让他变成 ahbei_2的。 请问怎么才能在遇到有重复的用户名之后让新用户名后面的那个数字递增呢? |
10
paloalto OP 目前的解决方案是先把原始注册关闭了,只开放“用豆瓣登录”功能。
|
11
ergatea 2012-12-17 19:31:17 +08:00 1
你把簡單的事情複雜了,你完全可以別去判斷username,這種重複率很高的項,你的用戶如果是註冊用戶,那麼你讓他自己來授權api登錄,如果不是如果還沒註冊,你可以在用戶使用api登錄後讓系統自己建立一個用戶,你說對嗎?
|
13
ergatea 2012-12-17 22:41:13 +08:00
可以這麼理解。如果是網站註冊用戶,就讓他選擇是否綁定API登入服務,反之則通過API登入後由系統建立用戶信息。
|