Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为Django测验应用程序中出现的候选人创建测验体验的方法是什么_Python_Django - Fatal编程技术网

Python 为Django测验应用程序中出现的候选人创建测验体验的方法是什么

Python 为Django测验应用程序中出现的候选人创建测验体验的方法是什么,python,django,Python,Django,对于一个测验Django项目,我们有一个几乎准备就绪的后端,用于创建问题和答案。现在,我想知道,我们将如何组织这次测验?关于这一点,有几点: 开始测验,测验将抛出N个不同的问题。学生登录或只是输入一些基本信息,如电子邮件和姓名,然后开始,让我们说一些按钮“开始测验” 还应显示计时器,指示剩余时间。如果不同的问题需要不同的计时器怎么办。喜欢困难的问题2分钟,而简单的问题只有1分钟。 用户不能通过任何方式重置此计时器(重新提交页面或 重新启动测试) 需要有一个结果页面来显示摘要。这个“结果”应该

对于一个测验Django项目,我们有一个几乎准备就绪的后端,用于创建问题和答案。现在,我想知道,我们将如何组织这次测验?关于这一点,有几点:

  • 开始测验,测验将抛出N个不同的问题。学生登录或只是输入一些基本信息,如电子邮件和姓名,然后开始,让我们说一些按钮“开始测验”
  • 还应显示计时器,指示剩余时间。如果不同的问题需要不同的计时器怎么办。喜欢困难的问题2分钟,而简单的问题只有1分钟。
    • 用户不能通过任何方式重置此计时器(重新提交页面或 重新启动测试)
    • 需要有一个结果页面来显示摘要。这个“结果”应该是一个模型吗?(我想是的)
    • 我们如何确保用户不能重考
我是从这个想法开始的,但我无法超越计时器。我们如何实现这一点?想法:

  • 我们应该使用Django会话吗?怎么做
  • 或者这应该使用Javascript?来完成
  • 如果客户机告诉服务器时间快到了,或者后端服务器应该发送一个信号

    • 我将尝试回答他们:

      开始测验,测验将抛出N个不同的问题。学生登录或只是输入一些基本信息,如电子邮件和姓名,然后开始,让我们说一些按钮“开始测验”

      这实际上取决于应用程序的其余部分。如果这只是一个一次性的测验应用程序,并且应用程序中不存在其他功能,那么您不必实现身份验证系统。但是,如果用户可以在不同的时间进行多个测验,并且您希望将所有这些测验都保存在一个用户帐户下,那么最好实现一个用户帐户系统

      还应显示计时器,指示剩余时间。如果…怎么办 不同的问题需要不同的计时器。喜欢难题2 分钟,但简单的只有1分钟

      我将创建一个
      问题
      模型。通过这种方法,您可以为每个特定问题设置不同的计时器值。如果计时器值变化不大,并且只有一些问题具有不同的计时器值,那么我将为此模型字段设置一个默认值,这样我就不必为每个问题指定一个值,而只需为困难的问题指定一个值

      timer=models.SmallIntegerField(默认值=60)#计时器值(秒)

      用户不能通过任何方式重置此计时器(重新提交 翻页或重新启动测试)

      唯一的解决方案是只在后端启动和观看计时器。客户端的一切都可以被操纵。但计时器是一个类似于的实时概念。我可以想出两种可能的解决方案:

      • 使用
        Websockets
        :只需在后端创建一个连接到计时器的事件,并在客户端侦听该事件。这样,您就可以在客户端显示准确的剩余时间,并且可以确保它没有被操纵。是关于如何构建web套接字倒计时系统的第一篇文章。我相信你能找到更多

      • 两个计时器:在后端启动计时器,然后在客户端呈现问题页面。并根据后端计时器的值在客户端启动第二个计时器。在这种情况下,两个计时器之间可能有毫秒的差异(因为响应时间),我认为您可以容忍。我从未尝试过这种方法。我会选择websocket解决方案。但是如果使用WebSooCts不是一个选项,你可以考虑这个选项。

      需要有一个结果页面来显示摘要。这个“结果”应该是什么 当模特?(我想是的)

      我想是的。即使您的应用程序是一次性测验应用程序,您也可能希望保留测验结果,以允许用户在以后
      共享他们的结果。一个
      结果
      模型就可以了

      我们如何确保用户不能重考

      我们不能。他们可以用不同的证书参加新的测验。即使为了唯一性目的保留并检查用户的
      IP地址
      ,它也可以重置和更改。我认为没有完整的解决方案。当然,你应该在测验的第一页检查用户的
      电子邮件地址

      我们应该使用Django会话吗?怎么做

      是的,您可以使用
      Django
      会话。但是
      不是
      对于
      计时器的事情

      Django会话可以帮助您在整个测验过程中跟踪用户。您可以在会话中存储与测验或用户相关的数据

      request.session['e-mail'] = '....'
      
      但是,如果您实现一个身份验证系统,事情会变得更容易



      在这种情况下,上述解决方案可能不是最好的。但我希望他们能给你一些基本的想法

      这就是我最终实现它的方式。请记住,我使用的是Python 2.7和Django 1.11。所以web套接字是不可能的

      我的型号:

      class Question(models.Model):
          description = models.CharField('Description', max_length=300)
          difficulty_choice = (
              ('H', 'Hard'),
              ('M', 'Medium'),
              ('E', 'Easy'),
          )
      
          difficulty = models.CharField(
              max_length=3,
              choices=difficulty_choice,
              default='M'
                          )
      
          skill = models.ForeignKey(Skill, null=True)
          qset = models.ManyToManyField(QuestionSet)
      
          def __str__(self):  # __unicode__ on Python 2
              return "{0}".format(self.description)
      
          def get_absolute_url(self):
              return reverse('Evaluator:question_details', args=[str(self.id)])
      
      
      class Answer(models.Model):
          """
          Answer's Model, which is used as the answer in Question Model
          """
          detail = models.CharField(max_length=128, verbose_name=u'Answer\'s text')
          question = models.ForeignKey(Question, null=True)
          correct = models.BooleanField('Correct', default=True)
      
          def __str__(self):
              return self.detail
      
      这就解决了,如何安排问题,将有答案,其中一些是正确的

      我将很快更新考试答案