相当于 Flask 中的 'While True' 循环:怎么做?
Equivalent of a 'While True' loop in Flask: how to do it?
我晚上的爱好是为我女儿编写地形测验。利用网络和 Stack Overflow 资源,我在 https://ac1976.pythonanywhere.com/api/wereld 上得到了一个 API 运行 点击它,服务器将响应一个由随机国家/资本组合组成的 JSON 对象,以及首都的 'wrong' 个答案列表。错误的答案是基于到(正确的)首都的距离,并且也是随机的。所以东京不会作为比利时首都的答案出现,但巴黎和伦敦可能。
主题:现在构建一个 flask 应用程序,它从上述 API 中获取响应,并创建一个多项选择问答游戏,询问随机国家的首都,并为用户提供 4 个多项选择选项.
我完成所有这些工作的主要途径,看起来像这样:
@app.route('/api/continent/', methods=['GET', 'POST'])
def quiz():
if request.method == "GET":
quiz = Game('wereld')
country = quiz.country
answers = quiz.answers
session['capital'] = quiz.capital
return render_template('quiz.html', a1=answers[0], a2=answers[1], a3=answers[2], a4=answers[3], country=country)
else:
answer = request.form['subject']
if answer == session.get('capital'):
return render_template('antwoord.html', answer="Jaaaaa...")
else:
return render_template('antwoord.html', answer="Neee..")
因此,在最初到达路线时,服务器会初始化 class 游戏,它本质上是一个包装器,用于捕获来自 API 的响应并将响应与每个数据的方法打包我们需要的要点:国家、答案和资本。这些测验项目存储在名称相似的变量 country、answers 和 capital 中。 HTML 模板文件中使用国家(以问题的形式)和答案(作为 4 个单独的按钮),在到达路线时显示。
如果用户按下四个按钮之一,路由逻辑的第二部分会判断答案是对还是错,然后发回一个新的 html 视图告诉用户答案是对....或错。
好的。都说得通了吧?
这是我的问题。我如何在 1 秒后自动返回到 'top of the if loop',以便代码自动重新获取来自 API 的新响应以播放另一轮?我试图在 if / else 循环之上放置一个简单的“While True:”,这适用于我这个测验的原始终端版本……但 Flask 没有。我明白为什么(它需要一个 'GET')但是....如何创建一个新的?
感谢您的想法/指导/为我指明正确的方向
阿里
HTML 页面的 header 中的元刷新标记怎么样。
在定义的时间到期后,您将被重定向到指定的 URL.
它看起来像这样。
<meta http-equiv="refresh" content="1; url={{url_for('quiz', _external=True)}}" />
如果您想使用 JavaScript,也可以使用带有超时的变体。
const uri = {{url_for('quiz') | tojson}};
setTimeout(() => window.location.replace(uri), 1000);
我晚上的爱好是为我女儿编写地形测验。利用网络和 Stack Overflow 资源,我在 https://ac1976.pythonanywhere.com/api/wereld 上得到了一个 API 运行 点击它,服务器将响应一个由随机国家/资本组合组成的 JSON 对象,以及首都的 'wrong' 个答案列表。错误的答案是基于到(正确的)首都的距离,并且也是随机的。所以东京不会作为比利时首都的答案出现,但巴黎和伦敦可能。
主题:现在构建一个 flask 应用程序,它从上述 API 中获取响应,并创建一个多项选择问答游戏,询问随机国家的首都,并为用户提供 4 个多项选择选项.
我完成所有这些工作的主要途径,看起来像这样:
@app.route('/api/continent/', methods=['GET', 'POST'])
def quiz():
if request.method == "GET":
quiz = Game('wereld')
country = quiz.country
answers = quiz.answers
session['capital'] = quiz.capital
return render_template('quiz.html', a1=answers[0], a2=answers[1], a3=answers[2], a4=answers[3], country=country)
else:
answer = request.form['subject']
if answer == session.get('capital'):
return render_template('antwoord.html', answer="Jaaaaa...")
else:
return render_template('antwoord.html', answer="Neee..")
因此,在最初到达路线时,服务器会初始化 class 游戏,它本质上是一个包装器,用于捕获来自 API 的响应并将响应与每个数据的方法打包我们需要的要点:国家、答案和资本。这些测验项目存储在名称相似的变量 country、answers 和 capital 中。 HTML 模板文件中使用国家(以问题的形式)和答案(作为 4 个单独的按钮),在到达路线时显示。
如果用户按下四个按钮之一,路由逻辑的第二部分会判断答案是对还是错,然后发回一个新的 html 视图告诉用户答案是对....或错。
好的。都说得通了吧?
这是我的问题。我如何在 1 秒后自动返回到 'top of the if loop',以便代码自动重新获取来自 API 的新响应以播放另一轮?我试图在 if / else 循环之上放置一个简单的“While True:”,这适用于我这个测验的原始终端版本……但 Flask 没有。我明白为什么(它需要一个 'GET')但是....如何创建一个新的?
感谢您的想法/指导/为我指明正确的方向
阿里
HTML 页面的 header 中的元刷新标记怎么样。
在定义的时间到期后,您将被重定向到指定的 URL.
它看起来像这样。
<meta http-equiv="refresh" content="1; url={{url_for('quiz', _external=True)}}" />
如果您想使用 JavaScript,也可以使用带有超时的变体。
const uri = {{url_for('quiz') | tojson}};
setTimeout(() => window.location.replace(uri), 1000);