错误 405 方法不允许,redirect(url_for('index'))

Posted

技术标签:

【中文标题】错误 405 方法不允许,redirect(url_for(\'index\'))【英文标题】:Error 405 Method Not Allowed, redirect(url_for('index'))错误 405 方法不允许,redirect(url_for('index')) 【发布时间】:2018-07-26 07:02:59 【问题描述】:

我目前正在将 pythonanywhere 用于学校项目。以下是我遇到问题的一段代码。

#When at www.example.com/ load "log_in.html" file
@app.route("/", methods=["GET"])
def index():
    if request.method == "GET":
        return render_template("log_in.html")

#When at www.example.com/create_account/
@app.route("/create_account", methods=["GET", "POST"])
def create_account():
   if request.method == "GET":
        return render_template("create_account.html", username = username, password = password)

return redirect(url_for('index'))

用户点击按钮并提交详细信息以创建帐户的意图是什么。数据被记录后,会被重定向回'index'下的登录页面。

在测试代码后,一切正常,直到重定向部分给我一个错误 405,方法不允许。

该网站位于http://fishypower.pythonanywhere.com/create_account 单击“创建帐户”按钮将给出错误 405

下面是http://fishypower.pythonanywhere.com/create_account的代码

<html>
    <head>
        <title>ElderMinder: Create Account</title>
    </head>
    <body>
        <div>
            <form action="." method="POST">
                <center><textarea name="username" placeholder="Enter your username"></textarea></center>
                <div></div>
                <center><textarea name="password" placeholder="Enter your password"></textarea></center>
                <div></div>
                <center><input type="submit" value="Create Account"></center>
            </form>
        </div>
    </body>
</html>

【问题讨论】:

【参考方案1】:

您正在使用&lt;form action="." method="POST"&gt;。您为什么决定使用句点作为行动目标?

该操作应该是空白的,或者只是将其保留以提交到它的当前 url 或 &lt;form action=" url_for('create_account') " method="post"&gt; 是明确的。

因此,简而言之,您会收到错误消息,因为您的表单提交将发送至 /,而该视图仅接受 GET 请求。

【讨论】:

以上是完全正确的,但只是稍微扩展一下:如果您在页面“fishypower.pythonanywhere.com/create_account”上,那么action="." 将提交到“fishypower.pythonanywhere.com”。但是如果你在页面“fishypower.pythonanywhere.com/create_account”(注意尾部的斜杠)那么action="."会提交给“fishypower.pythonanywhere.com/create_account”这个“。”与在 Unix 文件路径中的含义相同——当前“目录”。 感谢您的帮助。由于我最近才开始,我的编码仍然主要是编辑样本以满足我的需要。我打算将数据发送到数据库进行存储。我需要对代码做些什么吗?

以上是关于错误 405 方法不允许,redirect(url_for('index'))的主要内容,如果未能解决你的问题,请参考以下文章

405 错误:请求的 URL 不允许该方法

错误 405:不允许的方法

python: urllib2.HTTPError: HTTP 错误 405: 方法不允许

HttpURLConnection responseCode 405 方法不允许错误

Python 3:HTTP错误405:不允许的方法

405 - 机器人框架中不允许的方法