Python 为Django测验应用程序中出现的候选人创建测验体验的方法是什么
对于一个测验Django项目,我们有一个几乎准备就绪的后端,用于创建问题和答案。现在,我想知道,我们将如何组织这次测验?关于这一点,有几点:Python 为Django测验应用程序中出现的候选人创建测验体验的方法是什么,python,django,Python,Django,对于一个测验Django项目,我们有一个几乎准备就绪的后端,用于创建问题和答案。现在,我想知道,我们将如何组织这次测验?关于这一点,有几点: 开始测验,测验将抛出N个不同的问题。学生登录或只是输入一些基本信息,如电子邮件和姓名,然后开始,让我们说一些按钮“开始测验” 还应显示计时器,指示剩余时间。如果不同的问题需要不同的计时器怎么办。喜欢困难的问题2分钟,而简单的问题只有1分钟。 用户不能通过任何方式重置此计时器(重新提交页面或 重新启动测试) 需要有一个结果页面来显示摘要。这个“结果”应该
- 开始测验,测验将抛出N个不同的问题。学生登录或只是输入一些基本信息,如电子邮件和姓名,然后开始,让我们说一些按钮“开始测验”
- 还应显示计时器,指示剩余时间。如果不同的问题需要不同的计时器怎么办。喜欢困难的问题2分钟,而简单的问题只有1分钟。
- 用户不能通过任何方式重置此计时器(重新提交页面或 重新启动测试)
- 需要有一个结果页面来显示摘要。这个“结果”应该是一个模型吗?(我想是的)李>
- 我们如何确保用户不能重考
- 我们应该使用Django会话吗?怎么做
- 或者这应该使用Javascript?来完成李>
- 如果客户机告诉服务器时间快到了,或者后端服务器应该发送一个信号
- 我将尝试回答他们:
开始测验,测验将抛出N个不同的问题。学生登录或只是输入一些基本信息,如电子邮件和姓名,然后开始,让我们说一些按钮“开始测验”
这实际上取决于应用程序的其余部分。如果这只是一个一次性的测验应用程序,并且应用程序中不存在其他功能,那么您不必实现身份验证系统。但是,如果用户可以在不同的时间进行多个测验,并且您希望将所有这些测验都保存在一个用户帐户下,那么最好实现一个用户帐户系统
还应显示计时器,指示剩余时间。如果…怎么办
不同的问题需要不同的计时器。喜欢难题2
分钟,但简单的只有1分钟
我将创建一个
问题
模型。通过这种方法,您可以为每个特定问题设置不同的计时器值。如果计时器值变化不大,并且只有一些问题具有不同的计时器值,那么我将为此模型字段设置一个默认值,这样我就不必为每个问题指定一个值,而只需为困难的问题指定一个值
timer=models.SmallIntegerField(默认值=60)#计时器值(秒)
用户不能通过任何方式重置此计时器(重新提交
翻页或重新启动测试)
唯一的解决方案是只在后端启动和观看计时器。客户端的一切都可以被操纵。但计时器是一个类似于的实时概念。我可以想出两种可能的解决方案:
- 使用
:只需在后端创建一个连接到计时器的事件,并在客户端侦听该事件。这样,您就可以在客户端显示准确的剩余时间,并且可以确保它没有被操纵。是关于如何构建web套接字倒计时系统的第一篇文章。我相信你能找到更多Websockets
- 两个计时器:在后端启动计时器,然后在客户端呈现问题页面。并根据后端计时器的值在客户端启动第二个计时器。在这种情况下,两个计时器之间可能有毫秒的差异(因为响应时间),我认为您可以容忍。我从未尝试过这种方法。我会选择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
这就解决了,如何安排问题,将有答案,其中一些是正确的
我将很快更新考试答案