我正在尝试使用 Flask 删除一篇文章,但出现 KeyError

郑敏基

嗨,我正在使用 Flask 编写评论页面,但在创建删除按钮方面苦苦挣扎。根据我的代码,当单击删除按钮时,会出现 KeyError。评论表中只有两行,即作者和内容。我粘贴了显示和删除审查 API 代码,还有服务器端删除功能。

通过将标题和评论从客户端发送到服务器然后删除数据库中与客户端发送的标题和评论匹配的对象,我的方法是否可以删除代码?我想知道为什么会出现 KeyError 。我请求你的帮助!谢谢阅读。

  File "/Users/min05099/sparta/projects/detailPage/venv/lib/python3.8/site-packages/flask/app.py", line 2088, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Users/min05099/sparta/projects/detailPage/venv/lib/python3.8/site-packages/flask/app.py", line 2073, in wsgi_app
    response = self.handle_exception(e)
  File "/Users/min05099/sparta/projects/detailPage/venv/lib/python3.8/site-packages/flask/app.py", line 2070, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/min05099/sparta/projects/detailPage/venv/lib/python3.8/site-packages/flask/app.py", line 1515, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Users/min05099/sparta/projects/detailPage/venv/lib/python3.8/site-packages/flask/app.py", line 1513, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Users/min05099/sparta/projects/detailPage/venv/lib/python3.8/site-packages/flask/app.py", line 1499, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
  File "/Users/min05099/sparta/projects/detailPage/app.py", line 19, in write_review
    review_receive = request.form['review_give']
  File "/Users/min05099/sparta/projects/detailPage/venv/lib/python3.8/site-packages/werkzeug/datastructures.py", line 377, in __getitem__
    raise exceptions.BadRequestKeyError(key)
werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
KeyError: 'review_give' ```



```function showReview() {
                $.ajax({
                    type: "GET",
                    url: "/review",
                    data: {},
                    success: function (response) {
                        let reviews = response['all_reviews']
                        for (let i = 0; i < reviews.length; i++) {
                            let title = reviews[i]['title']
                            let review = reviews[i]['review']

                            let temp_html = `<tr>
                                               <td>${title}</td>
                                               <td>${review}</td>
                                               <td><button onclick="deleteReview('${title, review}')">delete</button></td>
                                           </tr>`
                            $('#reviews-box').append(temp_html)
                        }
                    }
                    }
                )
            }


            function deleteReview(title, review) {
                            $.ajax({
                                type: 'POST',
                                url: '/review',
                                data: {title_give:title, review_give:review},
                                success: function (response) {
                                    alert(response['msg']);
                                    window.location.reload()
                                }
                            });
                        } ```

```@app.route('/review', methods=['POST'])
def delete_review():
    title_receive  = request.form['title_give']
    review_receive = request.form['review_give']
    db.miniProject.delete_one({'title': title_receive, 'review': review_receive})
    return jsonify({'msg': 'Successfully Delete!'})```
威客

问题源于生成按钮时的字符串插值。

${title, review}只注入 的值review由于你deleteReview只收到一个参数,review_giveajax调用的数据字段为空,导致你的flask应用中缺少对应的key。

这是您正确执行字符串插值的方式:

let temp_html = `<tr>
        <td>${title}</td>
        <td>${review}</td>
        <td><button onclick="deleteReview('${title}, ${review}')">delete</button></td>
    </tr>`

此外,与其按标题和评论正文删除您的评论,不如在服务器端为每个评论分配一个 ID 会更好。然后,您可以根据此 ID 删除评论。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Flask中使用会话时出现KeyError

我应该多久查询一篇文章,以便我的爬虫不会被禁止?

为什么我循环中的第一篇文章意外缩进

如何用octopress可视化我的第一篇文章?

在一篇文章中使用2个中间件功能

给定一篇文章的 DOI,如何使用 python 获取域名?

使用wp_query检查第一篇文章

Table 使用 yajra/laravel-datatables 为一篇文章带来所有评论

尝试使用客户错误处理程序时出现“ KeyError:无”错误-Flask

如何修复上一篇文章缩略图中的“尝试获取非对象的属性”通知

我想通过分页每页显示一篇文章。但是分页按钮不起作用

正在对我写的一篇文章进行 QA,我不知道为什么最后一个 if 语句不会返回任何内容

当我写一篇长文章时滚动条出现(CKEditor)

我正在尝试连接 MySQl 和 Flask,但我一直收到错误消息。我正在为此网络应用程序使用 XAMPP

单击自定义分类法时,如何使用第一篇文章数据在同一页面上重定向?

删除第一篇文章并在PHP中显示第二篇文章

Python Flask JSON KeyError

Flask Python 中的 KeyError

当我尝试使用 asyncpg 的 executemany 方法时,我得到一个神秘的 KeyError

使用 QString 时出现 KeyError

Rails App中的上一篇文章

只选择作者的最后一篇文章

用laravel记录一篇文章的浏览次数?

渲染另一篇文章的引用

Wordpress 只显示一篇文章

显示wordpress的第一篇文章

链接到Blogdown中的另一篇文章

在MATLAB中复制一篇文章的图

获取Instagram用户的第一篇文章