python - 如何确定更新或删除帖子的正确用户
问题描述
我想更新和删除帖子,它正在发生,但现在我希望用户更新和删除仅由他们创建的帖子。从删除开始,这是我的删除功能
def delete_post(request , id):
post=Post.objects.get(pk=id)
if request.user==post.user: '''I think this if is not true even when the post is created by the same user who is requesting to delete it.'''
post.delete()
print("ok")
return redirect("home")
现在,当单击删除帖子时,它会返回主页,但帖子保持不变。它不会删除帖子。
解决方案
如果request.user
不是post.owner
,那么它不会删除帖子,但会重定向到home
视图。
通常不应使用GET 请求创建、更新或删除项目,因为 GET 请求应该是安全的并且只检索数据。因此,您应该将此视图限制为 POST 请求(或者可能是 POST 或 DELETE 请求)。
如果对象不存在或不属于当前用户,您可以使用get_object_or_404(…)
函数 [Django-doc]返回 HTTP 404 响应:
from django.contrib.auth.decorators import login_required
from django.views.decorators.http import require_POST
@login_required
@require_POST
def delete_post(request , id):
post = get_object_or_404(Post, pk=id, owner=request.user).delete()
return redirect('home')
注意:您可以使用
@login_required
装饰器 [Django-doc]将视图限制为经过身份验证的用户的视图 。
注意:您可以使用
@require_POST
装饰器 [Django-doc]将视图限制为 POST 请求 。
推荐阅读
- c# - C#:如何在异步方法中正确执行来自 Web 服务的自动生成的方法?
- machine-learning - 使用 KMeans 时为每个质心获取超过 2 个坐标
- rust - 我对通用函数和枚举有疑问
- python - 按名称获取不和谐的语音通道 ID
- css - 请帮助和建议悬停下划线菜单项
- c - 如何在运行时动态增加任何结构对象的大小?
- python - TypeError:“模块”对象不可调用,discord.py
- angular - 如何在 ngx-signaturepad 中修复“无法读取未定义的属性 'toDataURL'”
- javascript - 格式化 JSON 响应以构建 URL
- javascript - 将表格单元格中的内容复制到 Google 协作平台