You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Flask、Python、HTML的问答测验判分及结果展示问题求助

解决Flask问答测验的判分与结果展示问题

我来帮你拆解并解决这个问题,核心痛点就是路由间数据共享和判分逻辑实现这两点,咱们一步步来:

1. 解决路由间无法访问quizquestions的问题

HTTP是无状态协议,不同路由之间默认没法直接共享变量,这里推荐用Flask的session来存储测验题目数据——它能在用户会话中临时保存数据,实现跨路由访问。

步骤1:配置Session密钥

首先得给Flask app配置一个密钥,不然session功能没法启用:

from flask import Flask, session, redirect, url_for, request, render_template

app = Flask(__name__)
app.secret_key = 'your_secure_secret_key_here'  # 换成自己的密钥,生产环境要保密

步骤2:在/quiz路由中存储题目到Session

当用户提交分类和题目数量后,把查询到的quizquestions转成可序列化的格式(比如字典列表)存进session:

@app.route('/quiz', methods=['POST'])
def quiz():
    # 获取用户选择的参数
    category = request.form.get('category')
    num_questions = int(request.form.get('num_questions'))
    
    # 从数据库查询对应题目(这里假设你的查询逻辑已实现)
    quizquestions = YourQuestionModel.query.filter_by(category=category).limit(num_questions).all()
    
    # 将SQLAlchemy对象转成字典列表(因为对象不能直接存在session里)
    session['quizquestions'] = [
        {
            'id': q.id,
            'question_text': q.question_text,
            'options': q.options,  # 假设是列表格式,若为字符串可按分隔符拆分
            'correct_answer': q.correct_answer
        } for q in quizquestions
    ]
    
    return redirect(url_for('questionpage'))

步骤3:在/questionpage路由中读取Session数据

现在就能在questionpage路由里取出之前存的题目了:

@app.route('/questionpage')
def questionpage():
    quizquestions = session.get('quizquestions', [])
    if not quizquestions:
        # 若没有数据,跳回初始选择页面
        return redirect(url_for('quiz_selection'))  # 替换成你的初始页面路由
    return render_template('questionpage.html', questions=quizquestions)

2. 实现判分逻辑并区分正误题目

接下来处理用户提交的答案,对比正确答案,计算得分并记录每个题目的对错状态。

步骤1:修改questionpage.html的表单结构

每个题目要关联唯一标识(比如题目ID),这样提交时能对应到正确的题目:

<form method="POST" action="{{ url_for('check') }}">
    {% for question in questions %}
        <div class="question-card">
            <h3>{{ loop.index }}. {{ question.question_text }}</h3>
            {% for option in question.options %}
                <input type="radio" name="answer_{{ question.id }}" value="{{ option }}" required>
                <label>{{ option }}</label><br>
            {% endfor %}
        </div>
    {% endfor %}
    <button type="submit">提交答案</button>
</form>

步骤2:在/check路由中处理判分逻辑

从session取出题目,和用户提交的答案逐一对比,生成结果数据:

@app.route('/check', methods=['POST'])
def check():
    quizquestions = session.get('quizquestions', [])
    if not quizquestions:
        return redirect(url_for('quiz_selection'))
    
    score = 0
    results = []
    
    for question in quizquestions:
        # 获取用户提交的对应题目答案
        user_answer = request.form.get(f'answer_{question["id"]}')
        is_correct = user_answer == question['correct_answer']
        
        if is_correct:
            score += 1
        
        # 记录每个题目的结果详情
        results.append({
            'question_text': question['question_text'],
            'user_answer': user_answer,
            'correct_answer': question['correct_answer'],
            'is_correct': is_correct
        })
    
    # 可选:清空session中的题目数据,避免重复使用
    session.pop('quizquestions', None)
    
    return render_template('check.html', results=results, score=score, total=len(quizquestions))

步骤3:在check.html中展示区分正误的结果

用样式直观区分正确和错误的题目:

<h1>测验结果</h1>
<p>你的得分:{{ score }}/{{ total }}</p>

{% for result in results %}
    <div class="result-item {% if result.is_correct %}correct{% else %}incorrect{% endif %}">
        <h3>{{ loop.index }}. {{ result.question_text }}</h3>
        <p>你的答案:{{ result.user_answer }}</p>
        <p>正确答案:{{ result.correct_answer }}</p>
    </div>
{% endfor %}

<style>
    .correct { 
        color: #2ecc71; 
        border-left: 4px solid #2ecc71; 
        padding-left: 10px;
        margin: 10px 0;
    }
    .incorrect { 
        color: #e74c3c; 
        border-left: 4px solid #e74c3c; 
        padding-left: 10px;
        margin: 10px 0;
    }
</style>

额外小提示

  • 如果你的题目选项是数据库中存储的字符串(比如用逗号分隔),记得在序列化时拆成列表:q.options.split(',')
  • 生产环境中,建议用Redis或数据库存储session,默认的cookie存储仅适合小型应用
  • 可以给测验结果页面添加“重新开始”按钮,跳回初始选择页面

内容的提问来源于stack exchange,提问作者noobcs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 22:32:40