我正在用烧瓶进行测验,我试图获取用户的分数,但是每次重新加载页面时,都会出现此错误:'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>
答案 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