尽管使用 POST,但不允许使用 Flask- 方法 [重复]

Posted

技术标签:

【中文标题】尽管使用 POST,但不允许使用 Flask- 方法 [重复]【英文标题】:Flask- method not allowed despite using POST [duplicate] 【发布时间】:2019-07-18 02:22:14 【问题描述】:

我正在尝试在树莓派上创建一个基本登录页面,但是当我尝试登录该页面时,我不断收到 405 错误。我已经研究过这个问题,但它似乎只有在你没有使用正确的方法时才会出现,但因为它是一个登录屏幕,所以 POST 和 GET 应该绰绰有余。

Python

from flask import Flask
from flask import Flask, flash, redirect, render_template, request, session, abort
import os

app = Flask(__name__)

@app.route('/')
def home():
    if not session.get('logged_in'):
        return render_template('login.html')
    else:
        return "Hello Boss!"

@app.route('/login', methods=['POST', 'GET'])
def do_admin_login():
    if request.form['psw'] == 'password' and request.form['id'] == 'admin':
        print ("Hey ya!")
    else:
        print('wrong password!')
    return home()

if __name__ == "__main__":
    app.secret_key = os.urandom(12)
    app.run(debug=True,host='0.0.0.0', port=80)

HTML

<!DOCTYPE html>
<html>
<body>
<h1>Please login</h1
<form method="POST">
    <input name="id" type="text" placeholder="Enter UserID">
    <br>
    <input name="psw" type="password" placeholder="Enter Password">
    <input type="submit">
</form>
</body>
</html>

我已被重定向到另一个问题,该问题通过更改操作部分来解决,但是我没有操作,所以这不应该是同一个问题。我曾尝试向其中添加一个动作元素,但这并没有改变任何东西

【问题讨论】:

【参考方案1】:

问题是你需要在HTML中指定action属性:

<form method="POST" action="url_for('do_admin_login')">
    <input name="id" type="text" placeholder="Enter UserID">
    <br>
    <input name="psw" type="password" placeholder="Enter Password">
    <input type="submit">
</form>

您可能会注意到,我使用url_for 函数通过提供的方法(在本例中为do_admin_login())生成到给定端点的URL。所以值得一提的是,你需要把你的声明return home()改为return url_for("home")

【讨论】:

以上是关于尽管使用 POST,但不允许使用 Flask- 方法 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

允许 POST 到谷歌云功能但不允许 GET?

尽管设置了标头,但不允许 CORS 请求

Python Flask 跨站点 HTTP POST - 不适用于特定允许的来源

尽管添加了 android:usesCleartextTraffic 和 android:networkSecurityConfig,但不允许明文 HTTP 流量

尽管声明它们是目标 c ios 8,但不允许显示警报

不允许使用 GET405 方法(JavaScript 和 Flask)