首先,我对大部分内容都很陌生。我在远程(Linode)Ubuntu 服务器上运行 Flask 应用程序。该应用程序与 Gunicorn 和 Nginx 一起提供。
在最近的更新之后,当我提交表单时,重定向开始表现得很奇怪。
具体来说,我重定向到的 url 如下所示: mywebsite.com%2Cmywebsite.com/my/expected/redirect
(要明确,mywebsite.com是基本 url。在提交表单时,我希望被重定向到mywebsite.com/my/expected/redirect,但是我被重定向到mywebsite.com%2Cmywebsite.com/my/expected /重定向)
这仅发生在服务器上。在我的本地主机上,不存在此问题。
这仅在我提交表单(通过 wtf 表单)时发生。提交表单并获取虚假 url 后,如果我手动输入预期的 url,我会得到预期的页面 - 即表单提交成功的确认闪存消息,并且数据库包含通过表单提交的新数据。所以我猜 db.commit() 正在工作。
并非所有链接都已损坏,我可以成功地从一个页面导航到另一个页面。例如,我可以通过站点范围的 html 头文件中的这个链接从我的导航栏导航回家。
href="{{ url_for('home') }}"
Run Code Online (Sandbox Code Playgroud)
我可以通过这些按钮导航到其他页面(我知道我应该使用 url_for 而不是硬链接)
<button class="w3-bar-item w3-button w3-black" onclick="window.location.href = '/recipes';">Recipes</button>
<button class="w3-bar-item w3-button w3-yellow" onclick="window.location.href = '/newrecipe';">Add New Recipe</button>
Run Code Online (Sandbox Code Playgroud)
有三种不同的形式都会产生此错误。在下面你会看到它们是NewRecipe、NewBoilAddition、StartBoilTimer
我曾尝试将 _external=True 添加到 url_for 重定向,但是由于内部服务器错误而失败
从研究中,我知道 %2C 是一个未转义的逗号,因此我怀疑正在将 URL 列表传递给重定向,或者我遗漏了一些其他编码问题。我特别困惑,因为这个错误才刚刚出现,当时所有这些代码都可以正常工作。我已尝试回滚到我确定此错误不存在的提交,并且该错误在该提交中是可重现的。这让我怀疑是 gunicorn/nginx 负责,因为应用程序代码本身很好。
我超级困惑。任何想法表示赞赏!
初始化.py
from flask import …Run Code Online (Sandbox Code Playgroud)