Django decorator限制用户删除或更新其他条目

Django decorator限制用户删除或更新其他条目,django,django-models,django-forms,django-templates,django-views,Django,Django Models,Django Forms,Django Templates,Django Views,我的网站有用户和条目。我想创建一个Django装饰器来限制用户删除或更新其他条目。 但我已经做到了一些 我是这么想的 class EntryUpdate(generic.UpdateView): model = Entry fields = ['...'] .... @user_passes_test(lambda user: current.user.id == entry.user.id) @method_decorator(login_requir

我的网站有用户和条目。我想创建一个Django装饰器来限制用户删除或更新其他条目。 但我已经做到了一些

我是这么想的

class EntryUpdate(generic.UpdateView):
    model = Entry
    fields = ['...']
    ....

    @user_passes_test(lambda user: current.user.id == entry.user.id)
    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(EntryUpdate, self).dispatch(*args, **kwargs)

如果您已经在使用基于类的视图,请使用而不是decorator

from django.contrib.auth.mixins import UserPassesTestMixin

class EntryUpdate(UserPassesTestMixin, generic.UpdateView):
    model = Entry
    fields = ['...']

    def test_func(self):
        return self.request.user == self.get_object().user

如果您已经在使用基于类的视图,请使用而不是decorator

from django.contrib.auth.mixins import UserPassesTestMixin

class EntryUpdate(UserPassesTestMixin, generic.UpdateView):
    model = Entry
    fields = ['...']

    def test_func(self):
        return self.request.user == self.get_object().user

太棒了,成功了!!!但这是最好的方法吗??还有其他使用装饰的方法吗?如果你使用CBV,这是最好的方法,让基于函数的视图使用装饰器吧!创建它吧!!!但这是最好的方法吗??还有其他方法使用装饰吗?如果您使用CBV,这是最好的方法,请将装饰器的使用留给基于函数的视图