Python帖子删除功能失效求助:点击后仅跳转首页未删内容
删除帖子功能失效问题排查与解决
核心问题:传递错误的ID参数
你代码里最直接的错误是HTML删除链接传递的是用户ID而非帖子ID,导致删除逻辑找不到对应帖子:
- 路由
/delete/post/<int:id>期望接收的是帖子的ID - 但HTML中写的是
href="/delete/post/{{post.user.id}}",传的是发帖用户的ID
因为数据库中posts.id和users.id大概率不匹配,所以SQL删除语句执行后没有影响任何行,自然帖子不会消失,也不会报错(SQL语句本身是合法的)。
修复步骤
- 修正HTML中的删除链接
把删除链接的参数从post.user.id改为post.id:
<div class="card-body"> {% for post in posts %} <h3>{{post.title}}</h3> <h6>Posted by: {{post.user.username}}</h6> <p>{{post.content}}</p> <a href="/edit/post/{{post.id}}" class="btn btn-link">Edit</a> <a href="/delete/post/{{post.id}}" class="btn btn-link">Delete</a> {% endfor %} </div>
- 可选优化:改用POST请求执行删除(安全规范)
GET请求不应该用于修改/删除数据的操作(容易被误触、爬虫抓取导致意外删除),建议改为POST请求:
- 修改路由,指定
methods=['POST'],同时增加用户权限验证(确保只有帖子作者能删除):
@app.route('/delete/post/<int:id>', methods=['POST']) def delete_post(id): if 'user_id' not in session: return redirect('/logout') # 验证当前用户是否为帖子作者 post = models_post.Post.get_one({"id": id}) # 需要实现根据ID获取单条帖子的方法 if not post or post.user_id != session['user_id']: return redirect('/home') data = {"id": id} models_post.Post.delete(data) return redirect('/home')
- 把HTML中的删除链接改成表单提交:
<div class="card-body"> {% for post in posts %} <h3>{{post.title}}</h3> <h6>Posted by: {{post.user.username}}</h6> <p>{{post.content}}</p> <a href="/edit/post/{{post.id}}" class="btn btn-link">Edit</a> <form action="/delete/post/{{post.id}}" method="POST" style="display: inline;"> <button type="submit" class="btn btn-link">Delete</button> </form> {% endfor %} </div>
额外排查点
如果修正后仍有问题,可以检查:
- 确认
connectToMySQL.query_db方法是否正确执行了SQL语句(可以打印返回值,删除操作成功会返回受影响的行数) - 验证
session['user_id']是否正确,确保用户处于登录状态 - 检查数据库中
posts表的id字段是否为正确的主键,且数据类型匹配
内容的提问来源于stack exchange,提问作者AK-JUN
相关产品推荐
相关产品推荐

