“正确”的方法是如何扩展基本的auth_user表/整个auth系统,以支持许多自定义用户资料字段(例如用户名、位置、生日等)?我通过谷歌搜索了一些方法,但似乎没有人给出一个明确的答案。答案似乎要么完全用自定义表替换基本的auth_user表(并让auth系统知道),要么创建一个新的扩展表,并使用外键引用回基本的auth_user表。第一种方法似乎存在可重用性问题,第二种方法在表单等方面会有问题。有没有人有任何指针可以补丁进像自定义用户资料这样通用的东西,而不会破坏太多内容?
编辑:更多的阅读建议覆盖基本的auth_user表是正确的方法,经过一些试验和错误,我发现只需要插入一段代码就可以了。
只要在 models/db.py 文件中的
我不确定如何回答自己的问题,因此在此期间,如果有人能解释为什么这是正确的方法以及还需要注意什么,我会很感激!
编辑:更多的阅读建议覆盖基本的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()
之前执行此操作,似乎一切都能正常工作。这些字段将显示在用户个人资料页面上,并且其他所有内容仍按预期工作。我不确定如何回答自己的问题,因此在此期间,如果有人能解释为什么这是正确的方法以及还需要注意什么,我会很感激!
username
字段定义自定义表时,登录时使用的是用户名而不是email
。这正是我想要的,而且书上说这是内置行为,这太好了!感谢你澄清所有这些。 - orladeauth.messages.label_username
来指定标签(默认为“用户名”)。 - Anthony