【问题标题】:Django: UpdateView restrict per userDjango:UpdateView 限制每个用户
【发布时间】:2012-01-25 13:21:19
【问题描述】:

我有一个网站,用户可以在其中创建和编辑自己的列表。

我正在使用通用视图 CreateView 来允许用户创建列表。

我想使用通用视图 UpdateView 来允许他们编辑列表,但在这种情况下 login_required=True 是不够的,因为只有列表创建者可以编辑他/她的列表。

2 个问题:

1) 我可以在 URLconf 中指定任何参数来添加此限制吗?

2) 我可以强加那些只能用于 POST 而不能用于 GET 的通用视图吗?

谢谢

【问题讨论】:

    标签: django django-generic-views login-required


    【解决方案1】:

    1)你可以编写装饰器,使用方式与login_required装饰器相同,即:

    def user_permitted(function):
        def decorator(function):
            def _wrapped_view(request, *args, **kwargs):
                # get obj from request
                if obj.user != request.user:
                    return HttpResponseRedirect(reverse('forbidden'))
                return function(request, *args, **kwargs)
            return _wrapped_view
        return decorator(function)
    

    2) 是的,请参阅 decoratorsDecorating class-based views

    【讨论】:

      【解决方案2】:

      您可以在UpdateView 上覆盖get_queryset

      def get_queryset(self):
          base_qs = super(YourListUpdateView, self).get_queryset()
          return base_qs.filter(user=self.request.user)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-19
        • 1970-01-01
        • 2017-08-28
        相关资源
        最近更新 更多