扩展基础的“正确”方法是什么?
auth_user
表/对 整个auth
系统为了支持一些自定义用户 个人资料字段(例如用户名,位置,生日等)?
我从谷歌搜索中看到了一些方法,但似乎没有人给出一个直接的答案。答案似乎要么完全取代基地 auth_user
具有自定义的表(并让auth系统知道),或者创建一个带有外键引用的新扩展表回到基础 auth_user
表。第一个似乎有可重用性问题,第二个似乎有形式等问题。
有没有人有任何指针可以修补像自定义用户配置文件那样普遍的东西而不会破坏太多?
编辑: 更多的阅读建议覆盖基数 auth_user
table是要走的路,经过一些试验和错误后,我发现它就像放入一段代码一样简单:
# 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')))
),
)
只要这一点在之后执行 auth = Auth(db)
之前 auth.define_tables()
在models / db.py中,一切似乎都没问题。这些字段显示在用户个人资料页面上,其他所有内容仍然按预期工作。
不知道如何回答我自己的问题,所以在此期间,如果有人可以解释 为什么 这是正确的方法,还有什么必须记住,我很感激!