在 Django 中将内容类型限制为用户的最佳方法是什么?
假设我希望所有具有用户角色“blogger”的用户都拥有自己的博客。
我创建了一个博客应用程序。如何限制它以使登录的用户只能在他的“自己的”博客中发帖,以及如何制作仅显示用户博客的视图?
在 Django 中将内容类型限制为用户的最佳方法是什么?
假设我希望所有具有用户角色“blogger”的用户都拥有自己的博客。
我创建了一个博客应用程序。如何限制它以使登录的用户只能在他的“自己的”博客中发帖,以及如何制作仅显示用户博客的视图?
首先,您的博客条目必须附加到用户,这样您就知道在谁的博客上显示,对吧?模型.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 实现,但您还必须为其编写模型、身份验证和中间件......
我没有尝试实现这一点,但我发现了另一个非常有效的灵魂。它很容易实现并且做了我想要的一切。