带有自定义装饰器的 Django CBV
Django CBV with custom decorator
我正在尝试根据我的员工工作地点创建自定义访问权限。例如,如果他们在诊所 A 工作,他们只能 view/add/modify 那个诊所 A 的数据。但是如果他们负责那个地区,他们可以访问那个地区的所有诊所。它在函数基础视图上运行良好,但在 class 基础视图上却让我丧命。到目前为止我的代码如下:
def restrict_klinik(function):
def wrapper(request,slug, *args, **kw):
klinikslug = request.user.letakstaf_set.filter(klinik__slug=slug).count()
retenslug = Reten.objects.filter(slug=slug).count()
rejectslug = Reject.objects.filter(slug=slug).count()
if klinikslug == 1 or retenslug == 1 or rejectslug == 1:
return function(request, slug, *args, **kw)
messages.error(request, 'Sorry, You dont have access.')
return HttpResponseRedirect(reverse_lazy('home'))
return wrapper
class RestrictKlinikMixin(views.LoginRequiredMixin):
@method_decorator(restrict_klinik)
def dispatch(self, *args, **kwargs):
return super(RestrictKlinikMixin, self).dispatch(*args, **kwargs)
我使用@restrict_klinik作为我的函数基础视图,但是我在使用class基础视图时遇到了问题,例如:
class 添加诊所(RestrictKlinikMixin,generic.CreateView):
它会抛出 'slug' 错误。
有任何想法吗?谢谢!
更新:
显然我的观点之一使用 kwargs['slug'] 而不是 self.kwargs['slug']。有趣的是,我唯一改变的是在我的视图中添加新的 mixin。浪费了大约 4 个小时来解决这个问题,因为它仅使用 kwargs['slug'].
就可以正常工作 1 个月
显然我的观点之一是使用 kwargs['slug'] 而不是 self.kwargs['slug']。有趣的是,我唯一改变的是在我的视图中添加新的 mixin。浪费了大约 4 个小时来解决这个问题,因为它仅使用 kwargs['slug'].
就可以正常工作 1 个月
我正在尝试根据我的员工工作地点创建自定义访问权限。例如,如果他们在诊所 A 工作,他们只能 view/add/modify 那个诊所 A 的数据。但是如果他们负责那个地区,他们可以访问那个地区的所有诊所。它在函数基础视图上运行良好,但在 class 基础视图上却让我丧命。到目前为止我的代码如下:
def restrict_klinik(function):
def wrapper(request,slug, *args, **kw):
klinikslug = request.user.letakstaf_set.filter(klinik__slug=slug).count()
retenslug = Reten.objects.filter(slug=slug).count()
rejectslug = Reject.objects.filter(slug=slug).count()
if klinikslug == 1 or retenslug == 1 or rejectslug == 1:
return function(request, slug, *args, **kw)
messages.error(request, 'Sorry, You dont have access.')
return HttpResponseRedirect(reverse_lazy('home'))
return wrapper
class RestrictKlinikMixin(views.LoginRequiredMixin):
@method_decorator(restrict_klinik)
def dispatch(self, *args, **kwargs):
return super(RestrictKlinikMixin, self).dispatch(*args, **kwargs)
我使用@restrict_klinik作为我的函数基础视图,但是我在使用class基础视图时遇到了问题,例如:
class 添加诊所(RestrictKlinikMixin,generic.CreateView):
它会抛出 'slug' 错误。 有任何想法吗?谢谢!
更新: 显然我的观点之一使用 kwargs['slug'] 而不是 self.kwargs['slug']。有趣的是,我唯一改变的是在我的视图中添加新的 mixin。浪费了大约 4 个小时来解决这个问题,因为它仅使用 kwargs['slug'].
就可以正常工作 1 个月显然我的观点之一是使用 kwargs['slug'] 而不是 self.kwargs['slug']。有趣的是,我唯一改变的是在我的视图中添加新的 mixin。浪费了大约 4 个小时来解决这个问题,因为它仅使用 kwargs['slug'].
就可以正常工作 1 个月