Django 用户管理:如何避免每个用户看到其他用户的内容和数据?
Django User Management: how to avoid that each user sees content and data from other users?
在我的小型 Django 项目中,用户可以注册并通过填写一些模型表单,他们可以用自己的数据填充现有模型。
问题是登录后,任何用户不仅可以看到自己的数据,还可以看到其他用户创建的数据。
我需要避免这种情况。
每个用户都应该能够查看、修改自己的数据并与之交互。
每个模型都有属性用户,它是 ForeignKey
链接到 User
。
我可能在视图中遗漏了什么吗?
它们只是基于 class 的视图,不涉及 User
,它们只有 LoginRequiredMixin
装饰器。
对于登录视图,我使用的是 Django 标准,对于注册视图,我创建了 UserFormView
.
# Register page
url(r'^register/$', views.UserFormView.as_view(), name='register'),
# Login page
url(r'^accounts/login/$', auth_views.LoginView.as_view(), name='login'),
以下是我的看法:
class AllProgramsView (LoginRequiredMixin, generic.ListView):
template_name = 'programs/index.html'
context_object_name = 'programs_list'
def get_queryset(self):
return Program.objects.all()
class ProgramDetailView (LoginRequiredMixin, generic.DetailView):
model = Program
template_name = 'programs/program.html'
class ProgramCreate(LoginRequiredMixin, CreateView):
model = Program
form_class = ProgramFormClass
class ProgramUpdate(LoginRequiredMixin, UpdateView):
model = Program
form_class = ProgramFormClass
在models.py
中:
class Program(models.Model):
program_name = models.CharField(max_length=50)
program_description = models.CharField(max_length=250)
is_favourite = models.BooleanField(default="False")
user = models.ForeignKey(User, on_delete=models.CASCADE)
def get_absolute_url(self):
return reverse('programs:program', kwargs={'pk': self.pk})
def __str__(self):
return self.program_name
是否有正确的程序可以将每个用户与其他用户分开?
您可以通过以下方式获取请求查看和过滤其记录的当前用户
class AllProgramsView (LoginRequiredMixin, generic.ListView):
template_name = 'programs/index.html'
context_object_name = 'programs_list'
def get_queryset(self):
user = self.request.user
queryset = Program.objects.filter(user=user)
return queryset
在我的小型 Django 项目中,用户可以注册并通过填写一些模型表单,他们可以用自己的数据填充现有模型。
问题是登录后,任何用户不仅可以看到自己的数据,还可以看到其他用户创建的数据。
我需要避免这种情况。
每个用户都应该能够查看、修改自己的数据并与之交互。
每个模型都有属性用户,它是 ForeignKey
链接到 User
。
我可能在视图中遗漏了什么吗?
它们只是基于 class 的视图,不涉及 User
,它们只有 LoginRequiredMixin
装饰器。
对于登录视图,我使用的是 Django 标准,对于注册视图,我创建了 UserFormView
.
# Register page
url(r'^register/$', views.UserFormView.as_view(), name='register'),
# Login page
url(r'^accounts/login/$', auth_views.LoginView.as_view(), name='login'),
以下是我的看法:
class AllProgramsView (LoginRequiredMixin, generic.ListView):
template_name = 'programs/index.html'
context_object_name = 'programs_list'
def get_queryset(self):
return Program.objects.all()
class ProgramDetailView (LoginRequiredMixin, generic.DetailView):
model = Program
template_name = 'programs/program.html'
class ProgramCreate(LoginRequiredMixin, CreateView):
model = Program
form_class = ProgramFormClass
class ProgramUpdate(LoginRequiredMixin, UpdateView):
model = Program
form_class = ProgramFormClass
在models.py
中:
class Program(models.Model):
program_name = models.CharField(max_length=50)
program_description = models.CharField(max_length=250)
is_favourite = models.BooleanField(default="False")
user = models.ForeignKey(User, on_delete=models.CASCADE)
def get_absolute_url(self):
return reverse('programs:program', kwargs={'pk': self.pk})
def __str__(self):
return self.program_name
是否有正确的程序可以将每个用户与其他用户分开?
您可以通过以下方式获取请求查看和过滤其记录的当前用户
class AllProgramsView (LoginRequiredMixin, generic.ListView):
template_name = 'programs/index.html'
context_object_name = 'programs_list'
def get_queryset(self):
user = self.request.user
queryset = Program.objects.filter(user=user)
return queryset