【问题标题】:web2py sqlform errorweb2py sqlform错误
【发布时间】:2012-08-22 12:18:49
【问题描述】:

我是 web2py 的新手,我正在努力解决这个问题

我正在尝试创建一个注册和登录的东西。在模型中,我有以下代码为新用户创建表格

usersdb = DAL('postgres://postgres:postgres@localhost/'+ 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:postgres@localhost/'+ 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) 中。 “用户”

我不知道这些东西实际上是如何工作的(将数据库连接到控制器)。我正在破解 smb 编写的代码。否则。

感谢您的任何建议或简短的解释。

再见

【问题讨论】:

    标签: web2py


    【解决方案1】:

    您不应在控制器中重复userdbauth 的定义。模型文件在每个请求上执行(条件模型文件除外),并且控制器在包含模型中定义的任何对象的环境中执行。在您的控制器中,您正在用一个新对象覆盖原始的userdb 对象,并且您正在再次定义auth,但没有重新创建“用户”表——因此@ 上不再有“用户”表987654326@.

    只需从控制器中删除 userdbauth 定义即可。

    【讨论】:

    • 但是作为回报,那我如何获得表格呢?我猜我是用 SQLFORM 做的,但是如果我删除 userdb,我会收到一个错误
    • 如果您在模型文件(即 /models 文件夹中的文件)中真正定义了usersdb,那么它将在任何控制器中全局可用。如果不是,那么您没有在模型文件中正确定义它。你得到什么错误?
    • 所以我在 model/db.py auth = Auth(db, hmac_key=Auth.get_or_create_key()) auth.define_tables() 中创建了一个 auth 数据库,而在控制器中我只有函数 user return dict(形式=身份验证())。我从 web2py 的示例中复制。我收到一个错误 NameError: 未定义全局名称 'auth'。我的代码与 web2py 登录和注册的示例页面几乎相同
    • auth 不是数据库对象。首先,您必须创建一个数据库对象(例如,db = DAL(...))。然后将数据库对象传递给Auth() 构造函数,然后当您调用auth.define_tables() 时,它会将Auth 表添加到db 对象中。您是否在某处定义了db。你的代码有问题,但我不能说没有看到它。我建议在Google Group 上发帖。
    猜你喜欢
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多