我正在开发博客的后端,我需要对帖子的类型进行区分:已发布,未来帖子,草稿。为此,我首先从过去的请求中获取指示:
在意识到所有帖子类型始终在线之后,谢谢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 您可以创建草稿或预定的帖子,但此类帖子不是 在线,并且仅对已登录的用户可读。
答案 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)