我正在制作烧瓶测验网页,并试图将分数打印给用户

时间:2019-04-10 00:45:36

标签: python flask

我正在用烧瓶进行测验,我试图获取用户的分数,但是每次重新加载页面时,都会出现此错误:'TypeError:视图函数未返回有效响应。该函数返回None或不返回return语句结束。'

测验包括使用sqlalchemy存储在数据库中的问题。我已成功查询数据库以在页面上显示问题

这是html的代码,可在页面上显示问题

<h5 class="center-align">Answer the Questions</h5>
        <form action="http://localhost:5000/info" method='POST'>
                {% for computersystemsq in computersystemsq %}
                {% for computersystemsm in computersystemsm %}

                    <div class="row">
                            <div class="col s12">
                                {{ computersystemsq.question }}
                            </div>
                    </div>
                    <div class="{{ computersystemsm.id }}"></div>
                            <div class="row">
                                <div class="col s6">
                                    A: {{ computersystemsm.wrong_answer1 }}
                                </div>
                                <div class="col s6">
                                    B: {{ computersystemsm.wrong_answer2 }}
                                </div>
                            </div>
                            <div class="row">
                                <div class="col s6">
                                    C: {{ computersystemsm.answer }}
                                </div>
                            </div>
                                <div class="row">
                                        <div class="input-field col s6">
                                            {{ form.options( class= computersystemsm.id ) }}
                                            <label for="attempted_answer">Select an Option:</label>                 
                                        </div>
                                </div>
                                <button class="btn waves-effect waves-light" type="submit" id="{{ computersystemsm.id }}">mark</button>
            <br>
                    </div>  
                {% endfor %}
                {% endfor %}





        </form>

这是从表中获取计算机系统问题和计算机系统多重选择的查询(两个表,计算机系统问题存储问题,计算机系统多重选择存储答案,错误_答案1,错误_答案2)

@app.route("/computersystems", methods=['GET','POST'])
def computersystems():
    form=QuizForm()
    computersystemsq=ComputerSystemsQuestions.query.filter(ComputerSystemsQuestions.id).all()
    computersystemsm=ComputerSystemsMultipleChoices.query.filter(ComputerSystemsMultipleChoices.id).all()
    return render_template('computersystems.html',computersystemsq=computersystemsq,computersystemsm=computersystemsm, form=form)

这是我用来存储请求值和获取分数的代码

@app.route("/info", methods=['GET','POST'])
def info():

    value = request.args.get('value', 0, type=str)
    computersystemsm=ComputerSystemsMultipleChoices.query.filter(ComputerSystemsMultipleChoices.id).all()
    #if request.method == 'POST':
    quizscore = 0
    if computersystemsm[0].answer == value:
        quizscore = quizscore + 1
        return render_template('info.html', quizscore=quizscore,computersystemsm=computersystemsm)

我期望像这样的问题向用户显示分数:

<p>you've scored {{quizscore }}</p>

1 个答案:

答案 0 :(得分:0)

使用Flask,在设计def info(): if (request.method == 'GET'): pass elif (request.method == 'POST'): pass (路线)时,您需要考虑所有可能的结果。在您的最后一个代码片段中,有几件事需要提及。首先,创建一些逻辑来处理视图支持的不同方法。

else

http://flask.pocoo.org/docs/1.0/quickstart/#http-methods

您可以使用elif语句代替PUT,但是我更喜欢这种方式,以便将来在需要时可以轻松添加对if方法的支持。

第二,当您的False语句等于if computersystemsm[0].answer == value: quizscore = quizscore + 1 return render_template('info.html', quizscore=quizscore,computersystemsm=computersystemsm) else: return abort(500) 时,您需要返回一些内容。

我建议:

True

如果您的逻辑不等于abort,这将返回通用的内部服务器错误。如果使用此方法,请确保已导入from flask import abort

{{1}}

http://flask.pocoo.org/docs/0.12/quickstart/#redirects-and-errors