在进行新的数据库查询之前评估用户输入

2024-06-09 10:22:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个小的琐事与瓶子游戏,我有一些麻烦。 页面加载时,从数据库中提取一个随机的琐事问题并显示在浏览器中,当页面第一次加载时,服务器自动尝试从表单输入中获取值,并且输入为空(这并不奇怪)。但如果我尝试在输入字段中输入琐事问题的答案,然后单击提交按钮,页面将重新加载,并从数据库中获取下一个琐事问题。我的用户输入从不与当前的琐事问题匹配,因为它总是保留前一个问题的值

如何从用户输入中获取特定数据库查询的值,而不必在提交时重新加载页面并生成新的随机查询

在我的game.py文件中:

@app.route("/game", method=["POST"])
def game(db):
   db.execute("select * from questions order by rand() limit 1")
   data = db.fetchall()
   guess = ""
   name = ""
   for d in data:
      country_name = d["name"]

   if request.POST.the_guess:
      guess = request.POST.the_guess.strip()

return bottle.template("temp", data=data)

在我的temp.tpl中:

<form method="POST" action="/game"> <input type="text" name="the_guess"> <input type="submit" value="guess"> </form>


Tags: the用户nameformgame数据库dbdata
1条回答
网友
1楼 · 发布于 2024-06-09 10:22:51

无论用户是否提交表单,您的请求视图都会执行相同的操作,即

  • 随便问一个问题
  • strip响应(如果提供)

但是,您必须考虑两种情况

  • 用户点击链接“开始”玩游戏,所以刚刚登陆页面
  • 用户已提交表单,您必须评估他的回复

为此,必须将问题ID作为隐藏字段传递,以便知道正确的回答是什么

<form method="POST" action="/game">
    <input type="text" name="the_guess">
    <input type="submit" value="guess">
    <input type="hidden" name="qid" value="YOUR_QUESTION_ID">
</form>

因此,视图代码必须这样做(我不知道瓶子视图的正确语义,所以将其视为伪代码):

@app.route("/game", method=["POST", "GET"])
def game(db):
   # Store if user answered last question correctly or not
   user_feedback = None
   # See if this view is beng invoked by user submitting an answer
   if "submit" in request.POST:
       guess = request.POST.the_guess.strip()
       qid = request.POST.qid
       # Lookup DB for answer of question with ID qid. Store it as answer
       if guess == answer:
           user_feedback = True
       else:
           user_feedback = False
   # This part will always execute
   db.execute("select * from questions order by rand() limit 1")
   data = db.fetchall()
   for d in data:
      country_name = d["name"]         
   return bottle.template("temp", data=data, user_feedback=user_feedback)

基于user_feedback的值,您可以在模板中显示“Correct!”或“错误:”(“信息

相关问题 更多 >