我有一个decorater,如果id = 1的产品未激活,它可以防止用户访问url。我想创建与此类似的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
Run Code Online (Sandbox Code Playgroud)
任何想法如何创建类似于上述decorater的自定义混合。
实际上,我想为基于类的视图创建mixin。
有人可以帮我吗?
谢谢
我们可以制作一个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 PermissionDeniedRun Code Online (Sandbox Code Playgroud)
然后在如下视图中使用它:
class MyCustomView(ProductExistsRequiredMixin, View):
# ...Run Code Online (Sandbox Code Playgroud)