如何在 Django 中创建自定义 mixin?

我有一个装饰器,如果 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

任何想法如何创建类似于上述装饰器的自定义混合。


实际上我想为我的基于类的视图创建混合。


任何人都可以帮我解决这个问题吗?


谢谢


拉莫斯之舞
浏览 136回答 1
1回答

撒科打诨

我们可以制作一个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):    # ...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python