防止非用户更改网址/ ID

时间:2015-10-24 12:42:10

标签: python django

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,并检查每个对象是否属于该应用程序?

0 个答案:

没有答案