Web2py 表单点击用户身份验证
Web2py Form on-click user Authentication
我可以使用装饰器强制用户登录以提交表单。但我需要设置它的方式,当用户点击提交时,他应该被重定向到 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_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)
上面注册了一个回调,注册后会调用。它检查保存在会话中的调查提交,如果找到,它会将提交插入数据库,然后将其从会话中删除。
我可以使用装饰器强制用户登录以提交表单。但我需要设置它的方式,当用户点击提交时,他应该被重定向到 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_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)
上面注册了一个回调,注册后会调用。它检查保存在会话中的调查提交,如果找到,它会将提交插入数据库,然后将其从会话中删除。