0

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

假设我希望所有具有用户角色“blogger”的用户都拥有自己的博客。

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

4

2 回答 2

4

首先,您的博客条目必须附加到用户,这样您就知道在谁的博客上显示,对吧?模型.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 实现,但您还必须为其编写模型、身份验证和中间件......

于 2008-12-18T02:34:14.930 回答
-1

我没有尝试实现这一点,但我发现了另一个非常有效的灵魂。它很容易实现并且做了我想要的一切。

看看这个...

于 2008-12-18T11:50:42.153 回答