限制对经过身份验证的用户的访问

时间:2015-01-08 20:47:29

标签: python django photologue

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

我正在使用一个名为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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

{%if user.is_authenticated%}         {%for gallery%} ...         {%endfor%}         {%else%} {%for gallery in gallery | slice:“:3”%} ...         {%endfor%}         {%endif%}

在视图中限制结果而不是处理模板内部的逻辑似乎更“正确”,但它是一个简单的解决方案,并且它可以工作。