每个Django用户的博客都有“博客角色”

时间:2008-12-17 22:18:35

标签: django user-controls blogs restriction

在Django中将内容类型限制为用户的最佳方法是什么方法?

让我们说我希望拥有用户角色“博客”的所有用户都拥有自己的博客。

我创建了一个博客应用程序。如何限制它以便登录的用户只能在他自己的“博客”中发布,如何制作仅显示用户博客的视图?

2 个答案:

答案 0 :(得分:4)

首先你的博客条目必须附在用户身上,所以你知道在博客上展示它,对吗? models.py:

class BlogEntry(models.Model):
    user = models.ForeignKey(User, related_name='blog_entries')
    other_field_1 = ...
    other_field_2 = ...

接下来,在ModelForm中跳过它,forms.py:

class BlogEntryModelForm(forms.ModelForm):
    class Meta:
        exclude = ('user',)

然后,当用户想要发布条目时,您需要记录,views.py:

@login_required
def post_blog_entry(request):
    ....
    if request.method == 'POST':
       form = BlogEntryModelForm(request.POST)
       if form.is_valid():
          new_entry = form.save(commit=False)
          new_entry.user = request.user
          new_entry.save()

当您想要显示一些用户博客时,views.py:

def view_blog(request, blogger_name):
    user = get_object_or_404(User, username=blogger_name)
    entries = user.blog_entries.all()

用户是django.contrib.auth.models.User 如果用户无权创建博客,您可以向上面的视图添加自定义角色检查以显示404页面或错误页面。

您可以选择将django.contrib.auth中的User替换为您自己的User实现,但您也必须为其编写模型,身份验证和中间件......

答案 1 :(得分:-1)

我没有尝试实现这一点,但我找到了另一个非常好的解决方案。它很容易实现,并做了我想要的一切。

Check it out...