嗨,我正在使用 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_give
ajax调用的数据字段为空,导致你的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] 删除。
我来说两句