【问题标题】:I don't know the cause and solution of keyerror不知道keyerror的原因和解决方法
【发布时间】:2022-01-25 01:19:26
【问题描述】:

我是初学者。 我用的是烧瓶和pymongo。 如果你按下按钮,它就是“喜欢”。应该是+1,但是底部有个key错误。

我的python路由代码:

@app.route('/api/like', methods=['POST'])
def like_movie():
    title_receive = request.form['title_give']
    movie = db.toytoy.find_one({'title': title_receive})
    current_like = movie['like']
    new_like = current_like + 1
    db.toytoy.update_one({'title': title_receive}, {'$set': {'like': new_like}})
    return jsonify({'msg': 'like!'})

这就是我从 JS 发布的方式

  
 
 function like_movie(title) {
            $.ajax({
                type: 'POST',
                url: '/api/like',
                data: {title_give: title},
                success: function (response) {
                    console.log(response)
                    alert(response['msg']);
                    window.location.reload();
                }
            });
        }

我得到如下异常:

werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
    KeyError: 'title_give'

我想要的是“like_btn”。如果你按下按钮,它就会变成 +1。

【问题讨论】:

    标签: python flask


    【解决方案1】:

    您所做的基本问题是不尊重Content-type。从前端 JS,您正在使用 JSON 对象进行 POST。这使得请求的内容类型为application/json

    在后端代码中,您使用request.form,它期望请求采用编码类型(如application/x-www-form-urlencoded, multipart/form-data)等形式。

    因此,您需要在后端读取 JSON 内容,而不是从不可用的表单中读取。如下:

    ui_req = request.get_json()
    title_receive = ui_req['title_give']
    

    然后相应地解析其他结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      相关资源
      最近更新 更多