仅在用户为职员

时间:2019-07-17 09:40:39

标签: django django-views django-permissions django-2.2

我正在开发博客的后端,我需要对帖子的类型进行区分:已发布未来帖子草稿。为此,我首先从过去的请求中获取指示:

在意识到所有帖子类型始终在线之后,谢谢this solution,我只能将已发布的帖子放在网上。

在我的博客中,有两种用户类型: is_staff (默认的Django类型), is_user (位于我的注册模型中)。还有另一种类型的匿名用户,即没有任何注册类型的用户使用Google或其他解决方案到达我的博客。

因此,我已经开发了一个视图,该视图仅在用户为 is_staff 时显示草稿和将来的帖子,但我看到了禁止的错误

def singlePost(request, slug_post, slug_category):
    post_category = get_object_or_404(BlogCategory, slug_category=slug_category)
    post_filter = BlogPost.objects.filter(draft=False, publishing_date__lt=datetime.datetime.now())
    if not request.user.is_authenticated:
         post_filter = BlogPost.objects.filter(draft=False, publishing_date__lt=datetime.datetime.now())
         raise PermissionDenied
    elif request.user.is_user:
         post_filter = BlogPost.objects.filter(draft=False, publishing_date__lt=datetime.datetime.now())
         raise PermissionDenied
    else:
         post_filter = BlogPost.objects.all()
    post_details = get_object_or_404(post_filter, slug_post=slug_post)
    category_post_details = BlogPost.objects.filter(post_category=post_category)
    context = {
        "post_category": post_category,
        "post_details": post_details,
        "category_post_details": category_post_details,
        }
    template = 'blog/reading/single_post.html'
    return render(request, template, context)

我该如何解决? 我自己写了个人博客,这是学习更多有关Python和Django的机会。

注意事项:以这种方式,视图工作正常

def singlePost(request, slug_post, slug_category):
    post_category = get_object_or_404(BlogCategory, slug_category=slug_category)
    post_details = get_object_or_404(BlogPost, slug_post=slug_post)
    category_post_details = BlogPost.objects.filter(post_category=post_category)
    context = {
        "post_category": post_category,
        "post_details": post_details,
        "category_post_details": category_post_details,
        }
    template = 'blog/reading/single_post.html'
    return render(request, template, context)
  

注意:   我想要获得的是像Wordpress这样的后端。使用Wordpress   您可以创建草稿或预定的帖子,但此类帖子不是   在线,并且仅对已登录的用户可读。

1 个答案:

答案 0 :(得分:0)

感谢@RaideR的提示,我已经解决了我的问题。

def singlePost(request, slug_post, slug_category):
    post_category = get_object_or_404(BlogCategory, slug_category=slug_category)
    if not request.user.is_staff:
         post_filter = BlogPost.objects.filter(
                        draft=False,
                        publishing_date__lt=datetime.datetime.now()
                        )
    else:
         post_filter = BlogPost.objects.all()
    post_details = get_object_or_404(post_filter, slug_post=slug_post)
    category_post_details = BlogPost.objects.filter(post_category=post_category)
    context = {
        "post_category": post_category,
        "post_details": post_details,
        "category_post_details": category_post_details,
        }
    template = 'blog/reading/single_post.html'
    return render(request, template, context)