Python Django用户管理:如何避免每个用户看到来自其他用户的内容和数据?
在我的小Django项目中,用户可以注册,通过填写一些模型表单,他们可以用自己的数据填充现有模型Python Django用户管理:如何避免每个用户看到来自其他用户的内容和数据?,python,django,django-users,Python,Django,Django Users,在我的小Django项目中,用户可以注册,通过填写一些模型表单,他们可以用自己的数据填充现有模型 问题是,登录后,任何用户都不仅可以看到自己的数据,还可以看到其他用户创建的数据。 我需要避免这种情况。 每个用户都应该能够专门查看、修改和交互自己的数据 每个模型都有一个属性user,它是链接到用户的外键 我可能在视图中遗漏了什么吗 它们只是基于类的视图,不涉及用户,它们只是具有登录所需的mixin装饰器 对于登录视图,我使用Django标准,对于注册视图,我创建了一个UserFormView #
问题是,登录后,任何用户都不仅可以看到自己的数据,还可以看到其他用户创建的数据。 我需要避免这种情况。
每个用户都应该能够专门查看、修改和交互自己的数据
每个模型都有一个属性user,它是链接到
用户的外键
我可能在视图中遗漏了什么吗
它们只是基于类的视图,不涉及用户
,它们只是具有登录所需的mixin
装饰器
对于登录视图,我使用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
您可以获取请求查看的当前用户,并仅通过以下方式筛选其记录
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
您可以使用request.user来区分哪个用户正在请求数据。您可以发布视图。有了这一点,人们可以更清楚地回答Hi@Rajez,我刚刚编辑了我的问题,以包括视图。对于每个用户,对程序模型的查询是如何不同的?你介意把你的节目发出去吗Model@ArpitSolanki嗨,是的,我会添加模型。要回答您的问题,每个用户都可以创建自己的程序,并且在列表视图中,他们应该能够看到自己创建的所有程序。现在的问题是,所有用户都可以看到所有现有的程序(也由其他用户创建),而不仅仅是他们自己的程序。您可以使用request.user来区分请求数据的用户您可以发布视图吗。有了这一点,人们可以更清楚地回答Hi@Rajez,我刚刚编辑了我的问题,以包括视图。对于每个用户,对程序模型的查询是如何不同的?你介意把你的节目发出去吗Model@ArpitSolanki嗨,是的,我会添加模型。要回答您的问题,每个用户都可以创建自己的程序,并且在列表视图中,他们应该能够看到自己创建的所有程序。现在的问题是,所有用户都看到了所有现有的程序(也是由其他用户创建的),而不仅仅是他们自己的程序。在我的程序模型中(我已经将其添加到问题中,以防您要检查它),我有一个与用户模型具有外键关系的字段用户。我尝试按照您的建议添加code
user=self.request.user queryset=Program.objects.filter(user=user)返回queryset,但它不起作用。这段代码有什么问题吗?清除浏览器并刷新,它成功了!非常感谢。在我的程序模型中(我已将其添加到问题中,以防您想要检查它),我有一个与用户模型有外键关系的字段用户。我尝试按照您的建议添加code
user=self.request.user queryset=Program.objects.filter(user=user)返回queryset,但它不起作用。这段代码有什么问题吗?清除浏览器并刷新,它成功了!非常感谢你。