首页 > 解决方案 > 如何为登录用户而不是每个人显示删除/编辑链接?

问题描述

我知道如何在不同的视图中删除和编辑帖子,但是在一个页面中有一个帖子和多个答案的帖子,我将如何链接以编辑和删除所有这些不同用户的视图?

或者 is_authenticated 仅适用于一个用户,所以他们只能查看自己的帖子删除/编辑链接?

标签: django

解决方案


以最简单的形式,您可以在模板中执行此操作,

{% if request.user.is_authenticated %}
    Show Edit Link
    Show Delete Link
{% endif %}

但是,您只想在当前登录用户的答案上显示编辑/删除链接。

你可以这样做:

{% if request.user.is_authenticated and request.user == answer.creator %}
    Show Edit Link
    Show Delete Link
{% endif %}

最后,您还需要在 Edit 和 Delete 视图中进行检查,以确保用户实际上是答案的创建者,否则任何人都可以编辑/删除任何帖子:

def edit_view(request, post_id):
    if request.user.is_authenticated() and request.user == post.creator:
        # edit post
        ...

要在基于通用类的视图中做到这一点:

from django.core.exceptions import PermissionDenied

class PostDeleteView(DeleteView):
    def get(self, request, *args, **kwargs):
        post = self.get_object()
        if request.user != post.creator:
            # raise a 403 Forbidden error
            raise PermissionDenied()
        return super().get(request, *args, **kwargs)

推荐阅读