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

时间:2020-09-28 08:45:16

标签: python flask axios http-status-code-405

我正在尝试使用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--[2020年9月28日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(未允许方法)

我在这里做错了什么?

编辑:

从@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错误的请求

为什么?

Eidt 2:

好吧,我发现问题与我如何从请求访问数据有关,我应该使用request.json ['username']而不是request.form ['username'](这会导致400)(在这种情况下)。另外,双方的溃败路径均导致405。

1 个答案:

答案 0 :(得分:2)

只需删除其中的颤音斜杠

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

因为您定义的login路线的末尾是/

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