我有一个大型的调查问卷供用户填写。因为它是如此之大,我决定把它分成三个独立的表格在三个连续的页面上。
网址是:questionnairesection_1, questionnairesection_2, questionnairesection_3。
在提交每张表格后,表格数据会被保存到数据库中,在最后(第三张)表格后,这三张表格会被保存为一个pdf格式,供该用户使用。其重要的是,用户要完成三个问卷中的每一个问卷。
我的问题是,用户将能够使用地址栏输入www.websitequestionnairesection_3,并只完成第三部分,跳过前两部分,提交一个不完整的问卷。
我想不出有什么办法可以限制用户访问表单的后面部分,直到前面的部分被成功验证和保存。
PS--我曾想过为三个表单分别设置权限,一旦用户提交了一个表单,就给用户增加权限,但我觉得这样做很黑吗?
谢谢你。
这是我最后处理的方式。
@allowed_users(allowed_roles=['admin', 'registered_user'])
def page_two(request):
if request.method == 'POST':
form = FormTwoForm(request.POST, request.FILES, instance=request.user.formtwo)
if form.is_valid():
form.save()
return redirect('page_three')
else:
# redirect if user didnt access the page from personal_information
if(request.META.get('HTTP_REFERER') != request.build_absolute_uri(reverse('form_one'))):
return redirect('form_one')
else:
form = FormTwoForm(instance=request.user.formtwo)
context = {
'form' : form
}
return render(request, 'example/form_two.html', context)
@allowed_users(allowed_roles=['admin', 'registered_user'])
def form_three(request):
if request.method == 'POST':
form = FormThreeForm(request.POST, request.FILES, instance=request.user.formthree)
if form.is_valid():
form.save()
return redirect('form_four')
else:
# redirect if user didnt access the page from needs_analysis
if(request.META.get('HTTP_REFERER') != request.build_absolute_uri(reverse('form_two'))):
return redirect('form_two')
form = FormThreeForm(instance=request.user.formthree)
context = {
'form' : form
}
return render(request, 'example/form_four.html', context)