【发布时间】:2011-10-30 13:44:12
【问题描述】:
扩展基础
auth_usertable/the 的“正确”方法是什么 整个auth系统为了支持多个自定义用户 个人资料字段(例如用户名、位置、生日等)?
我从谷歌上看到了一些方法,但似乎没有人给出直接的答案。答案似乎是用自定义表完全替换基本auth_user 表(并让身份验证系统知道),或者创建一个新的扩展表,其中包含指向基本auth_user 表的外键引用。第一个似乎有可重用性问题,第二个是表单等问题。
有没有人可以在不破坏太多的情况下修补像自定义用户配置文件这样通用的东西?
编辑: 多读一点建议覆盖基本auth_user 表是要走的路,经过反复试验,我发现它就像放入一个块一样容易代码:
# before define_tables()
auth.settings.table_user = db.define_table('auth_user',
Field('email', length=128,label=T('Email'), default='', unique=True),
Field('user_name', length=128, label=T('User name'), default='', unique=True,
requires=IS_NOT_IN_DB(db, 'auth_user.user_name')
),
Field('password', 'password', readable=False, label=T('Password'),
requires=CRYPT()
),
Field('first_name', length=128, label=T('First name'), default='',
requires=(IS_NOT_EMPTY(error_message=auth.messages.is_empty),
IS_NOT_IN_DB(db, 'auth_user.first_name'))
),
Field('last_name', length=128, label=T('Last name'), default='',
requires=(IS_NOT_EMPTY(error_message=auth.messages.is_empty),
IS_NOT_IN_DB(db, 'auth_user.last_name'))
),
Field('registration_key', length=128, default='', writable=False, readable=False),
Field('country', 'string', length=15, label=T('Country'),
requires=IS_NULL_OR(IS_IN_SET(('England')))
),
)
只要在models/db.py 中的auth = Auth(db) 和auth.define_tables() 之前执行,一切似乎都正常。这些字段显示在用户个人资料页面上,其他所有内容仍按预期工作。
不知道如何回答我自己的问题,所以在此期间,如果有人可以解释为什么这是正确的做法,还有什么必须记住的,我会欣赏!
【问题讨论】: