I';I’我试图删除带有Flask的文章,但出现了KeyError

I';I’我试图删除带有Flask的文章,但出现了KeyError,flask,Flask,嗨,我正在用Flask编写评论页面,但正在努力创建删除按钮。根据我的代码,当单击delete按钮时,会出现KeyError。 审阅表中只有两行是Writer和Content。我粘贴了显示和删除ReviewAPI代码,还带有服务器端删除功能 通过从客户端向服务器发送title和review,然后删除数据库中与客户端发送的title和review匹配的对象,可以删除代码吗? 我想知道为什么会出现KeyError。 我请求你的帮助!谢谢你的阅读 File "/Users/min05099

嗨,我正在用Flask编写评论页面,但正在努力创建删除按钮。根据我的代码,当单击delete按钮时,会出现KeyError。 审阅表中只有两行是Writer和Content。我粘贴了显示和删除ReviewAPI代码,还带有服务器端删除功能

通过从客户端向服务器发送title和review,然后删除数据库中与客户端发送的title和review匹配的对象,可以删除代码吗? 我想知道为什么会出现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!'})```
文件“/Users/min05099/sparta/projects/detailPage/venv/lib/python3.8/site packages/flask/app.py”,第2088行,在__
返回self.wsgi_应用程序(环境,启动响应)
wsgi_应用程序中的文件“/Users/min05099/sparta/projects/detailPage/venv/lib/python3.8/site packages/flask/app.py”,第2073行
response=self.handle\u异常(e)
wsgi_应用程序中的文件“/Users/min05099/sparta/projects/detailPage/venv/lib/python3.8/site packages/flask/app.py”,第2070行
response=self.full\u dispatch\u request()
文件“/Users/min05099/sparta/projects/detailPage/venv/lib/python3.8/site packages/flask/app.py”,第1515行,完整发送请求
rv=自身处理用户异常(e)
文件“/Users/min05099/sparta/projects/detailPage/venv/lib/python3.8/site packages/flask/app.py”,第1513行,完整发送请求
rv=自我分派请求()
文件“/Users/min05099/sparta/projects/detailPage/venv/lib/python3.8/site packages/flask/app.py”,第1499行,在调度请求中
返回self.sure_sync(self.view_函数[rule.endpoint])(**req.view_参数)
文件“/Users/min05099/sparta/projects/detailPage/app.py”,第19行,在write_review中
审查接收=请求。表格['review\u give']
文件“/Users/min05099/sparta/projects/detailPage/venv/lib/python3.8/site packages/werkzeug/datastructures.py”,第377行,在__
引发异常。BadRequestKeyError(键)
werkzeug.exceptions.BadRequestKeyError:400错误请求:浏览器(或代理)发送了此服务器无法理解的请求。
KeyError:'review\u give'```
```函数showReview(){
$.ajax({
键入:“获取”,
url:“/review”,
数据:{},
成功:功能(响应){
let reviews=响应['all_reviews']
for(设i=0;i
问题源于生成按钮时的字符串插值

${title,review}
仅注入
review
的值。由于您的
deleteReview
只接收一个参数,因此ajax调用数据中的
review\u give
字段留空,导致flask应用程序中相应的键丢失

以下是正确执行字符串插值的方法:

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

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

检查,它可能会回答您的问题。我还有一个问题。我试图通过DB分配的id删除评论,但我不知道在编码index.html时如何获取id。你能给出一个解决方案吗?就像你得到每一篇评论的标题和正文一样。您需要通过
showriew
功能将id从flask应用程序传递到前端我非常感谢您的努力!祝你好运