首页 > 解决方案 > 如何确定更新或删除帖子的正确用户

问题描述

我想更新和删除帖子,它正在发生,但现在我希望用户更新和删除仅由他们创建的帖子。从删除开始,这是我的删除功能

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")

现在,当单击删除帖子时,它会返回主页,但帖子保持不变。它不会删除帖子。

标签: pythondjangodjango-modelsdjango-views

解决方案


如果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 请求 。


推荐阅读