我正在与django建立博客。博客帖子的所有者只能编辑博客帖子。如何保护路线?我应该制作自定义中间件还是有简单的方法
答案 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用于基于类的视图。
为便于理解,下面是一个示例:
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