1

在一个应用程序中,我需要创建两种类型的帐户,比如说用户和导师。他们每个人都应该能够注册/登录/...用户/导师帐户,由 db 中的不同表定义。

例如

[app]/user/register应该提供一个带字段的表单:username, email, password, hobby [app]/tutor/register应该提供一个带字段的表单:username, email, pass, name, surname, telephone

Web2py 身份验证服务允许使用auth_user可自定义的表。有没有办法在一个应用程序中根据控制器分别使用两个表?

字段auth.settings.table_user包含对 auth_table 的引用,但我可能不应该将它用于此目的。

4

1 回答 1

1

Auth 系统并非旨在以这种方式工作。相反,最好将两种用户类型的所有字段都放在一个auth_user表中,然后根据上下文有选择地设置字段的readablewritable属性。TrueFalse

在定义 Auth 的模型文件中:

user_extra_fields = [Field('hobby'), ...]
tutor_extra_fields = [Field('telephone', ...]

auth.settings.extra_fields['auth_user'] = (
    [Field('user_type', requires=IS_IN_SET(['User', 'Tutor']))] +
    user_extra_fields + tutor_extra_fields)

在管理 Auth 功能的控制器中:

def user():
    if request.args(0) in ['register', 'profile']:
        hidden_fields = (user_extra_fields if request.args(1) == 'tutor'
                         else tutor_extra_fields)
        for field in hidden_fields:
            field.readable = field.writable = False
    return dict(form=auth())
于 2013-06-29T19:57:01.390 回答