0

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

在我意识到所有类型的帖子总是在线后,感谢这个解决方案,我只能将已发布的帖子放到网上。

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

因此,我开发了一个视图,仅当用户是is_staff但我看到Forbidden 错误时才显示草稿和未来的帖子。

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,您可以创建草稿或预定帖子,这种类型的帖子不在线,并且只有登录用户才能阅读。

4

1 回答 1

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)
于 2019-07-18T08:54:18.200 回答