将 ID 从 HTML 发送到 Flask Python
Sending ID from HTML to Flask Python
我是 Flask 的初学者 - Python。现在我正在创建评论功能。在下面的代码中,我可以列出博客或类似内容的所有评论。但是现在,我想创建用于删除每个博客的按钮。请告诉我如何将 blog_id
(现在保存为 user_comment._id
)发送到服务器以及如何在服务器上请求它。
{% for user_comment in user_comments %}
<form action="{{ url_for('comments.del_comment') }}" method="post">
<ul class="comments-list">
<li class="comment">
<a class="pull-left" href="#">
<img class="avatar" src="http://bootdey.com/img/Content/user_1.jpg" alt="avatar">
</a>
<div class="comment-body">
<div class="comment-heading">
<h4 class="user">{{ user_comment.email }}</h4>
<h5 class="time">{{ user_comment.created_date }}</h5>
</div>
<p>{{ user_comment.comment }}</p>
</div>
</li>
<li>
<button type="submit" class="btn btn-primary">Delete</button>
</li>
</ul>
</form>
{% endfor %}
Give the button a name and value :
<input type="submit" name ="btn1" value="delete_blog " class="btn btn-primary" />
Call the button with flask like so:
def delete_blog():
if request.method == 'POST':
if request.form['btn1'] == 'delete_blog':
pass # do something
else:
pass # do something else
elif request.method == 'GET':
return render_template('blog.html', form=form)
希望对你有帮助,这个问题有点混乱。
实际上,您可以将每条评论的 ID 存储在按钮的数据属性中。然后你定义一个像 '/comments/<id>/delete/'
这样的路由来删除评论。为了防止仅通过在浏览器中调用 URL 来删除评论,我建议将路由限制为仅使用 DELETE 方法并通过 ajax 请求调用它。
所以将以下路线添加到您的 views.py
@main.route('/comments/<comment_id>/delete', methods=['DELETE'])
def delete_comment(comment_id):
comment = Comment.query.get(comment_id)
if comment is None:
return jsonify(
status='error', message='no comment with id {}'.format(comment_id))
db.session.delete(comment)
db.session.commit()
return jsonify(status='ok')
您的删除按钮应如下所示:
<button href="" class="btn btn-primary delete_comment" data-id="{{ user_comment.id }}/>
在您的模板中添加一个小的 ajax 请求:
<script>
$(document).ready(function() {
$SCRIPT_ROOT = {{ request.script_root|tojson|safe }};
// Delete comment
$('.delete_comment').click(function(event) {
var comment_id = $(this).data('id');
var url = $SCRIPT_ROOT + '/comments/' + comment_id + '/delete';
$.ajax({
url: url,
type: 'DELETE',
}).done(function(data) {
location.reload();
});
});
});
</script>
我是 Flask 的初学者 - Python。现在我正在创建评论功能。在下面的代码中,我可以列出博客或类似内容的所有评论。但是现在,我想创建用于删除每个博客的按钮。请告诉我如何将 blog_id
(现在保存为 user_comment._id
)发送到服务器以及如何在服务器上请求它。
{% for user_comment in user_comments %}
<form action="{{ url_for('comments.del_comment') }}" method="post">
<ul class="comments-list">
<li class="comment">
<a class="pull-left" href="#">
<img class="avatar" src="http://bootdey.com/img/Content/user_1.jpg" alt="avatar">
</a>
<div class="comment-body">
<div class="comment-heading">
<h4 class="user">{{ user_comment.email }}</h4>
<h5 class="time">{{ user_comment.created_date }}</h5>
</div>
<p>{{ user_comment.comment }}</p>
</div>
</li>
<li>
<button type="submit" class="btn btn-primary">Delete</button>
</li>
</ul>
</form>
{% endfor %}
Give the button a name and value :
<input type="submit" name ="btn1" value="delete_blog " class="btn btn-primary" />
Call the button with flask like so:
def delete_blog():
if request.method == 'POST':
if request.form['btn1'] == 'delete_blog':
pass # do something
else:
pass # do something else
elif request.method == 'GET':
return render_template('blog.html', form=form)
希望对你有帮助,这个问题有点混乱。
实际上,您可以将每条评论的 ID 存储在按钮的数据属性中。然后你定义一个像 '/comments/<id>/delete/'
这样的路由来删除评论。为了防止仅通过在浏览器中调用 URL 来删除评论,我建议将路由限制为仅使用 DELETE 方法并通过 ajax 请求调用它。
所以将以下路线添加到您的 views.py
@main.route('/comments/<comment_id>/delete', methods=['DELETE'])
def delete_comment(comment_id):
comment = Comment.query.get(comment_id)
if comment is None:
return jsonify(
status='error', message='no comment with id {}'.format(comment_id))
db.session.delete(comment)
db.session.commit()
return jsonify(status='ok')
您的删除按钮应如下所示:
<button href="" class="btn btn-primary delete_comment" data-id="{{ user_comment.id }}/>
在您的模板中添加一个小的 ajax 请求:
<script>
$(document).ready(function() {
$SCRIPT_ROOT = {{ request.script_root|tojson|safe }};
// Delete comment
$('.delete_comment').click(function(event) {
var comment_id = $(this).data('id');
var url = $SCRIPT_ROOT + '/comments/' + comment_id + '/delete';
$.ajax({
url: url,
type: 'DELETE',
}).done(function(data) {
location.reload();
});
});
});
</script>