2012-08-22 39 views
0

我是新的在web2py和我掙扎着它web2py sqlform錯誤

我想打包註冊和登錄的東西。在模型中,我有以下代碼,我在CONTROLER所以現在創建TABEL爲新用戶

usersdb = DAL('postgres://postgres:[email protected]/'+ request.vars['school'], migrate=True) 
auth = Auth(usersdb, hmac_key=Auth.get_or_create_key()) 
usersdb.define_table(
    'users', 
    Field('first_name', length=128, default=''), 
    Field('last_name', length=128, default=''), 
    Field('email', length=128, default='', unique=True), 
    Field('address', length=256, default=''), 
    Field('postcode', length=128, default=''), 
    Field('city', length=128, default=''), 
    Field('password', 'password', length=512, readable=False, label='Password'), 
    Field('registration_key', length=512, writable=False, readable=False, default=''), 
    Field('reset_password_key', length=512, writable=False, readable=False, default=''), 
    Field('registration_id', length=512, writable=False, readable=False, default=''), 
    format='%(first_name)s %(last_name)s') 

我有以下代碼:

usersdb = DAL('postgres://postgres:[email protected]/'+ request.vars['school'], migrate=True) 
auth = Auth(usersdb, hmac_key=Auth.get_or_create_key()) 
auth.settings.registration_requires_approval = True 
form = SQLFORM(usersdb.users) 
if form.process(session=None, formname='test').accepted: 
    response.flash = 'form accepted' 
elif form.errors: 
    response.flash = 'form has errors' 
else: 
    response.flash = 'please fill the form' 
# Note: no form instance is passed to the view 

#set sample validator (do not allow empty nor duplicate names) 
return dict(form=form,config=config) 

誤差以SQLFORM(usersdb.users)loged。 'users'

我不知道這些東西是如何工作的(將數據庫連接到控制器)。我正在盜用smb編寫的代碼。其他。

謝謝你的任何建議或簡短的解釋。

再見

回答

1

你不應該重複的userdbauth定義控制器。模型文件在每個請求上執行(條件模型文件除外),並且控制器在包含模型中定義的任何對象的環境中執行。在您的控制器中,您將覆蓋原始對象userdb,並且您正在定義auth,但不會重新創建「用戶」表 - 因此userdb上不再有「用戶」表。

只需從控制器中刪除userdbauth的定義。

+0

但是,作爲回報,我該如何獲得表格呢?我猜SQLFORM我這樣做,但如果我刪除userdb,我收到一個錯誤 – Yebach

+0

如果你真的已經在模型文件(即/ models文件夾中的文件)中定義'usersdb',那麼它將全局可用任何控制器。如果不是,那麼你沒有在模型文件中正確定義它。你會得到什麼錯誤? – Anthony

+0

所以我在model/db.py auth = Auth(db,hmac_key = Auth.get_or_create_key())中創建了一個auth數據庫auth.define_tables()並且在控制器中我只有函數user return dict(form = auth()) 。我從web2py的樣本複製而來。我收到一個錯誤NameError:未定義全局名稱'auth'。我有幾乎相同的代碼,以web2py登錄的示例頁面和註冊 – Yebach