如何保护用户免于在django中编辑其他博客文章?

时间:2019-04-04 07:37:45

标签: django

我正在与django建立博客。博客帖子的所有者只能编辑博客帖子。如何保护路线?我应该制作自定义中间件还是有简单的方法

2 个答案:

答案 0 :(得分:1)

创建混合。会是这样的:

class IsOwnerMixin(object):
    permission_denied_message = _("You are not the owner of this blog - you cannot edit it")

    def dispatch (self, request, *args, **kwargs):
        if self.get_object().owner != request.user:
            raise PermissionDenied(self.get_permission_denied_message())
        return super().dispatch(request, *args, **kwargs)

    def get_permission_denied_message(self):
        """
        Override this method to override the permission_denied_message attribute.
        """
        return self.permission_denied_message

有关更多信息,请参阅文档:https://docs.djangoproject.com/en/2.2/topics/class-based-views/mixins/

答案 1 :(得分:1)

您可以为此目的创建一个混合。如果您使用的是功能视图,则可以使用功能装饰器来解决问题,而可以将mixins用于基于类的视图。

为便于理解,下面是一个示例:

mixin

class IsPermittedMixin(object):
    def dispatch(self, request, *args, **kwargs):
        if request.user.is_authenticated():
            //check the permission of the user
                return super(IsPermittedMixin, self).dispatch(request, *args, **kwargs)
        raise PermissionDenied()

观看次数

您认为您可以将此混入用作:

class EditBlog(IsPermittedMixin, View):
    //do something