Javascript 将表单内外的数据保存到数据库中
我正在学习用Django编写代码。所以我有一个显示测验的表单和一个计算这些测验的JavaScript文件。 测验显示在Javascript 将表单内外的数据保存到数据库中,javascript,python,django,Javascript,Python,Django,我正在学习用Django编写代码。所以我有一个显示测验的表单和一个计算这些测验的JavaScript文件。 测验显示在中,我还有其他细节,比如课程,仍然显示在表格上。 就我所知,POST只获取表单中的数据。如果我的分数在表格之外,我该怎么做 这是我已经做过的: 计算结果的JavaScript: function submitAnswers(answers) { var total = answers.length; var score = 0; var choice = [] //new d
中,我还有其他细节,比如课程,仍然显示在表格上。
就我所知,POST只获取表单中的数据。如果我的分数在表格之外,我该怎么做
这是我已经做过的:
计算结果的JavaScript:
function submitAnswers(answers) {
var total = answers.length;
var score = 0;
var choice = []
//new dynamic method 1
for (var i = 1; i <= total; i++) {
choice[i] = document.forms["quizForm"]["q" + i].value;
}
for (i = 1; i <= total; i++) {
if (choice[i] == null || choice[i] == '') {
alert('You skipped question ' + i);
return false;
}
}
// new dynamic method for checking answer
for (i = 1; i <= total; i++) {
if (choice[i] == answers[i - 1]) {
score++;
}
}
//Display Result
var results = document.getElementById('results');
results.innerHTML = "<h3>You scored <span>" + score + "</span> out of <span>" + total + "</span></h3>"
alert("You scored " + score + " out of " + total);
var scoreOnly = document.getElementById('scoreOnly');
scoreOnly.innerHTML = score;
document.getElementById('btnSubmit').style.display = 'none';
return false;
}
我想要的是一种将
内外的项目都发布到数据库中的方法。您有两种解决方案
第一步:使用
第二:可以将表单属性添加到表单外部的输入中。你可以得到它
但是:我希望你需要计算服务器端测验的分数。因为在安全性和正确的逻辑方法方面。我不明白你为什么把东西放在表单之外。我在表单中尝试过,但对我来说仍然不起作用。你能帮我看一下吗?通常情况下,不是在客户端计算测验分数,然后将分数和课程发送给服务器,而是将客户端的答案发送给服务器(“永远不要相信客户端”),然后服务器可以计算分数,保存分数,并向客户端返回响应。您的JavaScript本质上是在验证所有答案是否都得到了回答,您只需将所有
输入
字段设置为必填项
。如果您致力于此方法,则需要将名为课程
和仅分数
的隐藏输入字段设置在
标记内。在submitAnswers
函数中设置它们的值,就像在向用户显示结果时对scoreOnlydiv所做的那样。div
内容不会随表单一起提交,这可能是您在请求中没有看到任何内容的原因。在服务器上发布[“课程”]
或请求。发布[“仅分数”]
变量。您是对的。我想当我点击提交按钮时,帖子没有发送。当我试着自己寻找一种方法时,你能帮我找到一种更好的编码方法吗?还是编辑我的?
//Gets its value after JavaScript has finished computing.
<div class="text-blue text-darken-3" id="results"></div>
//This div scores only the score. No additional information.
<div class="text-blue text-darken-3" id="scoreOnly" name="scoreOnly" hidden></div>
<hr>
<form method="POST" name="quizForm" action="/quizzer/"
onsubmit="return submitAnswers(answers = [{% for q in questn %}'{{ q.answer }}',{% endfor %}])">
{% csrf_token %}
<div name="canditate">{{user.email}}</div>
{% for q in questn %}
<div name="course">{{q.course}}</div>
<h5> {{ q.question|safe }} </h5>
<p><label><input class="with-gap" name="q{{ q.id }}" type="radio" value="a" /><span
class="blue-text text-darken-2"> {{ q.option_a|safe }}</span></label></p>
<p><label><input class="with-gap" name="q{{ q.id }}" type="radio" value="b" /><span
class="blue-text text-darken-2"> {{ q.option_b|safe }}</span></label></p>
<p><label><input class="with-gap" name="q{{ q.id }}" type="radio" value="c" /><span
class="blue-text text-darken-2"> {{ q.option_c|safe }}</span></label></p>
<br>
<hr>
{% endfor %}
<br>
<center><button class="btn blue darken-3" type="submit" id="btnSubmit">SUBMIT</button></center>
</form>
def index(request):
if request.method == "GET":
context = {}
questn = Questions.objects.all()
context['title'] = 'Exams'
context['questn'] = questn
return render(request, "quizzer/index.html", context)
if request.method == "POST":
# print(request.POST)
course = request.POST["course"]
scoreResult = request.POST["scoreOnly"]
theScores = ExamScores(course=course, scoreResult=scoreResult)
theScores.save()
return render(request, "quizzer/index.html", context)