TLDR:我如何通过在进行评估时更改网址来阻止候选人进行和保存其他测试?
这是我的第一个django项目: 一个评估网络应用程序,允许候选人注册(创建候选人)并进行电子评估,包括几个测试。他们没有登录用户。
客户可以登录并查看属于其客户的应用程序的结果。
相关模型:
如何通过在进行评估时更改网址来阻止候选人查看/执行/保存其他测试?
# ex: /assessment/1/register/
url(r'^(?P<assessment>[0-9]+)/register/$', views.RegisterView.as_view(), name='register'),
#url(r'^register/$', views.RegisterView.as_view(), name='register'),
# ex: /assessment/1/test/1/
url(r'^(?P<assessment>[0-9]+)/test/(?P<pk>[0-9]+)/$', views.TestView.as_view(), name='test'),
# ex: /assessment/1/test/1/save
url(r'^(?P<assessment>[0-9]+)/test/(?P<pk>[0-9]+)/save/$', views.testscore_save, name='test_save')
我提供&#34; next&#34;在评估的每个步骤之后使用以下功能
def get_next_test_url(request):
appl = Application.objects.get(id=request.session['appl_id'])
deploymentList = appl.assessment.deployment_set.order_by('order')
testList = [item.test for item in deploymentList]
scoresList = [item.testid for item in appl.testscore_set.all()]
for test in testList:
if int(test.id) in scoresList:
continue
else: #next test
request.session['currentTestId'] = test.id
return reverse('assessment:test', kwargs={'assessment':appl.assessment.id, 'pk':test.id} )
#no tests left, finished. only set astatus to complete if it was incomplete, to prevent changes after reject/accept.
if appl.astatus == Application.ASTATUS[0][0]: #INCOMPLETE
appl.astatus = Application.ASTATUS[1][0] #COMPLETED
appl.save()
return reverse('home')
我正在考虑某种参数代码http://.../?c=XXXXXX,它基于url本身和每个页面的更新,但我不知道我应该寻找哪个方向...编写自定义中间件?
或者最好使用存储在会话中的appl_id,并检查每个对象是否属于该应用程序?