flask axios post返回http状态码405/400

Posted

技术标签:

【中文标题】flask axios post返回http状态码405/400【英文标题】:flask axios post return http status code 405/400 【发布时间】:2021-01-13 20:03:36 【问题描述】:

我正在尝试使用 axios 将数据发布到服务器。我可以点击 GET 请求,但在 POST 中遇到问题。

# i am using CORS
app = Flask(__name__, static_url_path='',
            static_folder='web/static', template_folder='web/templates')
CORS(app)

#flask server code
@app.route('/login', methods=['GET', 'POST'])
def login():
    print('hi')
    global logingStatus
    global currentUser
    if request.method == 'POST':
        result = db.login(request.form['username'], request.form['password'])
        if result == 'success':
            logingStatus = True
            currentUser = db.getUserObj(request.form['username'])
            # print(type(currentUser), '<----')
            return redirect(url_for('dashboard'))
        else:
            return result
    else:
        logingStatus = False
        return render_template('login.html')

客户端代码:

axios.post('/login/', 
                        username: this.username,
                        password: this.password
                    ).then(function (response) 
                        if(response.data.includes('ERROR')) 
                            this.errorMessage = response.data
                            this.isError = true
                        
                    ).catch(function (error) 
                        console.log(error);
                    );

错误:

服务器控制台:

127.0.0.1 - - [28/Sep/2020 13:55:04] "GET /login HTTP/1.1" 200 -

127.0.0.1 - - [28/Sep/2020 13:55:21] "POST /login/ HTTP/1.1" 405 -

客户:

加载资源失败:服务器响应状态为 405 (METHOD NOT ALLOWED)

我在这里做错了什么?

编辑:

在@cizario 的回答之后,我尝试了

axios('/login',...);
# error
Failed to load resource: the server responded with a status of 400 (BAD REQUEST)

我不确定做错了什么。但我没有解决我的问题。

另外,当我尝试这个时:

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

# response: test
# headers
access-control-allow-origin:*

它正在工作!

在之前的帖子请求中,它给出了响应 400 BAD REQUEST

为什么?

开斋节 2:

好的,我发现问题与我如何从请求访问数据有关,我应该使用 request.json['username'] 而不是 request.form['username'] (导致 400)(在这种情况下)。此外,两边不同的路由路径导致 405。

【问题讨论】:

【参考方案1】:

只需删除其中的颤音斜线

axios.post('/login', ..)

因为你定义了login 路由,最后没有/

@app.route('/login', methods=['GET', 'POST'])

【讨论】:

我最初尝试过,但它正在响应Failed to load resource: the server responded with a status of 400 (BAD REQUEST)我不确定我到底做错了什么。 我真的需要使用 CSRF 发送,因为我可以使用 html 表单进行正常的发布请求吗? @sameepbaraiya 我想我错了,因为你已经设置了CORS(app) 也许它可能丢失/错误headers,不确定但我正在搜索 @sameepbaraiya 我以前不知道但是看看这个 SO 线程***.com/questions/45373124/… 它建议添加CORS 支持这种方式CORS(app, resources=r"/YOURAPP/*": "origins": "*") 试试看,如果可以的话更新我的答案 是的,以前看那个答案,但我发现只是与我如何访问烧瓶中的请求有关的问题。 request.form['username'] 在这里引起问题。我无法从请求中检索数据。但是,谢谢你的回答:)

以上是关于flask axios post返回http状态码405/400的主要内容,如果未能解决你的问题,请参考以下文章

axios的post请求返回状态码400

axios的post请求返回状态码400

Flask,如何为ajax调用返回成功状态码

Cors Post 请求上的 Axios 网络错误,状态码为 200

Flask,Axios POST 返回网络错误

axios post 400 状态码