Web2py表单点击用户身份验证

时间:2017-08-21 15:47:35

标签: python web2py

我可以使用装饰器强制用户登录以提交表单。但是我需要设置它,当用户点击提交时,他应该被重定向到注册/注册。

目前我的控制器中的表格如下:

@auth.requires_login()
def survey_create():
    form = SQLFORM(db.survey).process()
    if form.accepted:
        session.flash = 'Survey Processed'
        redirect(URL('index'))
    return locals()

点击提交后,我需要发送用户注册表。

请告知。

1 个答案:

答案 0 :(得分:1)

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

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

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