【问题标题】:Limiting access to authenticated user限制对经过身份验证的用户的访问
【发布时间】:2015-01-08 20:47:29
【问题描述】:

我正在尝试限制对照片库网站上经过身份验证的用户的访问。我希望经过身份验证的用户可以看到所有照片,而未经身份验证的用户只能看到三张。

我正在使用一个名为 Photologue 的第三方库,它有一个继承自 DetailView() 的类 GalleryDetailView()。我想覆盖画廊详细视图上的 get_context_data() 方法,并在那里添加准备要显示的照片列表的代码,并将该列表添加到模板上下文中。到目前为止,我有:

class CustomGalleryDetailView(GalleryDetailView):

    def get_context_data(self, **kwargs):
        context = super(CustomGalleryDetailView, self).get_context_data(**kwargs)
        if not self.request.user.is_authenticated():
            items = OrderedDict(itertools.islice(context.iteritems(), 4))
            return items

        else:
            return context

编辑:根据一些答案,我现在有:

class CustomGalleryDetailView(GalleryDetailView):

    def get_context_data(self, **kwargs):
        context = super(CustomGalleryDetailView, self).get_context_data(**kwargs)
        if not self.request.user.is_authenticated():
            context['object'] = Gallery.objects.filter()[:3]
            return context

        else:
            return context

但由于某种原因,经过身份验证和未经身份验证的用户仍然可以看到所有照片。我知道身份验证有效,因为我已经玩了几个小时了,并且看到了不同的结果(只是不是我需要的结果)。

【问题讨论】:

  • 模板本身是什么样子的?

标签: python django photologue


【解决方案1】:

首先,将context = ...移出if。 其次,添加打印或断点以验证您是否处于 if 的第二部分的第一部分。

【讨论】:

    【解决方案2】:

    虽然我没有弄清楚 mixin/view 方法的问题,但我在模板中用一个简单的 if/else 解决了这个问题:

    {% if user.is_authenticated %} {% for photo in Gallery %} ... {% endfor %} {% 别的 %} {% for photo in Gallery|slice:":3" %} ... {% endfor %} {% endif %}

    限制视图中的结果而不是处理模板内的逻辑似乎更“正确”,但这是一个简单的解决方案,并且有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-28
      • 2016-01-15
      • 1970-01-01
      • 2019-10-13
      • 2022-08-24
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多