Python 单击“用户身份验证”时的Web2py表单

Python 单击“用户身份验证”时的Web2py表单,python,web2py,Python,Web2py,我可以使用decorator强制用户登录以提交表单。但我需要将其设置为当用户单击submit时,他应该被重定向到register/signup 当前,我的控制器中的表单如下所示: @auth.requires_login() def survey_create(): form = SQLFORM(db.survey).process() if form.accepted: session.flash = 'Survey Processed' red

我可以使用decorator强制用户登录以提交表单。但我需要将其设置为当用户单击submit时,他应该被重定向到register/signup

当前,我的控制器中的表单如下所示:

@auth.requires_login()
def survey_create():
    form = SQLFORM(db.survey).process()
    if form.accepted:
        session.flash = 'Survey Processed'
        redirect(URL('index'))
    return locals()
我需要发送用户注册表,一旦他点击提交


请告知。

您可以按如下方式更改控制器:

def survey_create():
    if auth.is_logged_in():
        def onsuccess(form):
            db.survey.insert(db.survey._filter_fields(form.vars))
            session.flash = 'Survey Processed'
        next_url = URL('default', 'index')
    else:
        def onsuccess(form):
            session.survey_submission = form.vars
            session.flash = 'Please Register'
        next_url = URL('default', 'user', 'register')

    form = SQLFORM(db.survey).process(dbio=False, onsuccess=onsuccess, next=next_url)

    return dict(form=form)
调用
.process
时,
dbio
设置为
False
,以防止提交自动插入数据库。相反,根据用户是否登录,
onsuccess
回调和
next\u url
url用于控制表单提交成功后发生的情况。如果用户未登录,
form.vars
存储在会话中,我们将重定向到注册页面

为了在成功注册后插入保存的调查提交,可以将以下代码添加到模型文件中(在定义了
auth
之后的某处):


上面注册了一个将在注册后调用的回调。它会检查会话中保存的调查提交,如果找到,会将提交插入数据库,然后将其从会话中删除。

是否仅在成功注册后保存表单提交并插入数据库?是的。但在此之前,我只想重定向用户登录/注册,如果他没有登录。谢谢
def insert_survey(_):
    if 'survey_submission' in session:
        db.survey.insert(db.survey._filter_fields(session.survey_submission))
        del session.survey_submission
        session.flash = 'Survey Processed'
        redirect(URL('default', 'index'))

auth.settings.register_onaccept.append(insert_survey)