我有一个装饰器,如果 id=1 的产品未激活,它会阻止用户访问 url...我想创建一个类似于此的 mixin..这是我的装饰师:from django.core.exceptions import PermissionDeniedfrom 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任何想法如何创建类似于上述装饰器的自定义混合。实际上我想为我的基于类的视图创建混合。任何人都可以帮我解决这个问题吗?谢谢
1 回答
撒科打诨
TA贡献1934条经验 获得超2个赞
我们可以制作一个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):
# ...
添加回答
举报
0/150
提交
取消