【问题标题】:Flask doesn't recognize POST method on herokuFlask 无法识别 heroku 上的 POST 方法
【发布时间】:2020-05-23 18:19:08
【问题描述】:

我正在尝试发出 post 请求,但我收到错误 405: method not allowed.

@app.route('/')
def hello_world():
     return 'Hello World!'



@app.route('/register', methods=['POST'])
def register_user():
    user_info = request.get_json()
    if request.method == 'POST':
        user = User.query.filter_by(username = user_info['username']).first()
        if user is not None:
            return jsonify({"msg":"User already exists!"}), 404
        saved_user = User(username=user_info['username'], password=user_info['password'])
        db.session.add(saved_user)
        db.session.commit()
        return ""
    return "", 200

这是我的要求:

    r = requests.post('https://myapp.herokuapp.com/register',json = {'username':'testname','password':'testpsw'})
    assert r.status_code == 200 

如果我把它改成 methods = ['GET', 'POST'] 它只是一个得到。

【问题讨论】:

  • 尝试将user_info = request.get_json() 保持在request.method 行下方。错误还存在吗?
  • 我试过了,什么也没发生 :(
  • 能否提供错误信息?也请尝试放置打印语句以找出代码不起作用的确切位置。我在本地尝试用打印语句替换 if request.method == 'POST': 下的代码段,它对我来说效果很好。
  • 这是我们在 heroku 中运行时的错误消息 ("GET /register HTTP/1.1" 405 178 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:74.0)壁虎/20100101 火狐/74.0")。所以它是一个 get 方法,但我想要一个帖子。

标签: python flask post heroku get


【解决方案1】:

更改以下行,

r = requests.post('https://myapp.herokuapp.com/register',json{'username':'testname','password':'testpsw'})

对此,

r = requests.post('http://localhost:5000/register', json = {'username':'testname','password':'testpsw'})

您需要将对象分配给requests.post函数的第二个参数“json”才能使请求生效。

【讨论】:

  • 我们希望它在 heroku 上而不是在本地。还添加了 = 符号,谢谢!
猜你喜欢
  • 2018-07-02
  • 2021-01-26
  • 2016-09-06
  • 2021-12-14
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
相关资源
最近更新 更多