为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

拉莫斯之舞 2021-11-02 17:09:30
我有一个装饰器,如果 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):


    # ...


查看完整回答
反对 回复 2021-11-02
  • 1 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信