我有一个修饰器,如果id = 1的产品未激活,则阻止用户访问网址... 我想创建一个与此相似的mixin。
这是我的装饰工
from django.core.exceptions import PermissionDenied
from ecommerce_integration.models import Product
def product_1_activation(function):
def wrap(request, *args, **kwargs):
products = Product.objects.filter(pk=1, activate=True)
if products:
return function(request, *args, **kwargs)
else:
raise PermissionDenied
wrap.__doc__ = function.__doc__
wrap.__name__ = function.__name__
return wrap
任何想法都可以创建类似于上述装饰器的自定义混合。
实际上,我想为基于类的视图创建mixins。
有人可以帮我吗?
谢谢
答案 0 :(得分:4)
我们可以制作一个Mixin
来覆盖dispatch
方法,例如:
class ProductExistsRequiredMixin:
def dispatch(self, request, *args, **kwargs):
if Product.objects.filter(pk=1, activate=True):
return super().dispatch(request, *args, **kwargs)
else:
raise PermissionDenied
,然后在类似这样的视图中使用它:
class MyCustomView(ProductExistsRequiredMixin, View):
# ...