python - 在 GET 和 POST 之间传输随机生成的数据库 key

标签 python flask redis

我在处理下面代码的 POST 部分时遇到问题。我得出的结论是,在从登录发送表单后,正在重新加载关键变量,并且整数更改为不再始终与逻辑匹配。但出于某种原因,如果我将 riddledbanswer 打印到终端,它总是有效。

我是 Python 和 Flask 的新手,我不确定是否有办法通过重新安排代码或使用某种重定向来分别处理 GET 和 POST 来修复我的代码中的这个错误,以便修复 key 两者之间。

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

    key = random.randint(1,3)

    riddle = con.get("riddle:%i" %key)
    dbanswer = con.get("riddle:%i:answer" %key)

    # print(riddle)
    # print(dbanswer)

    if request.method == 'GET':
        return render_template("login.html", riddle = riddle)


    elif request.method =="POST":
        answer = request.form['answer']
        if answer == dbanswer:
            return render_template("welcome.html")
        else:
            return render_template("login.html", riddle = riddle)

    else:
        return "<h2>Invalid request</h2>"

最佳答案

只需将 key 存储在表单中即可。

if request.method == 'GET':
    return render_template('login.html', riddle=riddle, riddle_id=key)

然后在您的 login.html 表单中,使用该值:

<input type="hidden" name="riddle_id" value="{{ riddle_id }}"/>

现在,当您POST 表单到您的 View 时,您可以捕获它来完成圆圈:

if request.method == "POST":
    answer = request.form['answer']
    riddle_id = request.form['riddle_id']
    if answer == con.get("riddle:%i:answer" % riddle_id):
        return render_template("welcome.html")

关于python - 在 GET 和 POST 之间传输随机生成的数据库 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32514776/

相关文章:

python - 在 Python 中序列化数组

python - 没有名为 registration.backends.default.urls 的模块

python - 如何在 python Flask 的新选项卡中打开响应

python - Flask WTForms 无法将文件保存到不同的目录

REDIS(错误)ERR unknown command 'set' on Redis 3.0.4

python - 修改循环中的列表项(python)

python - SQLAlchemy/Flask/Postgres编程错误: <unprintable ProgrammingError object>

c# - 使用 PooledRedisClientManager() 连接到 Ubuntu 虚拟机上的远程 Redis 实例

ruby-on-rails - 使用 Sidekiq 的 Redis 连接池实现 Multi-Tenancy (命名空间)设置

python - MATLAB 到 Python 转换 : vectors, 数组,索引元素