为了支持大量自定义用户配置文件字段(例如用户名,位置,生日等),扩展基
auth_user表/整个auth系统的"正确"方法是什么?
我从谷歌搜索引起了一些方法,但似乎没有人给出一个直接的答案.答案似乎要么完全用auth_user自定义表替换基表(并让auth系统知道),要么创建一个带有外键引用的新扩展表回到基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()它,这一切似乎都没问题.这些字段显示在用户个人资料页面上,其他所有内容仍然按预期工作.
不知道如何回答我自己的问题,所以在此期间,如果有人能解释为什么这是正确的做法,还有什么必须记住,我会很感激!
Ant*_*ony 16
auth.settings.table_user_name存储用户表的名称(默认为auth_user),并且auth.settings.table_user是对用户表本身的引用.这两个设置在Auth代码的其他地方使用,因此在创建自定义用户表时更新它们很重要(在您的情况下,您不需要更新,auth.settings.table_user_name因为您保留了默认名称).书中有一节介绍了这种自定义Auth表的方法.
请注意,如果您只想在默认auth_user表中添加一些额外字段,而不是像您一样重新定义整个表,则可以执行以下操作:
auth.settings.extra_fields[auth.settings.table_user_name] = [Field('myfield1',...),
    Field('myfield2',...), etc.]
在调用之前auth.define_tables(),这些额外的字段将附加到auth_user表中.请注意,如果在默认的某些字段auth_user,你根本不想用表,您可以通过设置自己隐藏在登记个人资料的形式readable和writable属性False.
| 归档时间: | 
 | 
| 查看次数: | 5583 次 | 
| 最近记录: |