2013-06-29 53 views
1

在一個應用程序中,我需要創建兩種類型的帳戶,比如說用戶和導師。 他們每個人都應該能夠註冊/登錄/ ...用戶/導師帳戶由db中的不同表格定義。Web2py,驗證兩種類型的配置文件

例如

[app]/user/register應該提供一個形式字段:username, email, password, hobby [app]/tutor/register應該提供一個形式字段:username, email, pass, name, surname, telephone

的web2py AUTH服務允許使用auth_user表,其可以定製。有沒有辦法在一個應用程序中根據控制器分別使用兩個表格?

字段auth.settings.table_user包含auth_table的引用,但我可能不應該將其用於此目的。

回答

1

驗證系統的設計目的不是這樣。相反,最好將兩種用戶類型的所有字段放在單個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) 

在管理該驗證功能的控制器:

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())