Django用户管理:如何避免每个用户看到来自其他用户的内容和数据?

时间:2017-08-23 15:21:42

标签: python django django-users

在我的小型Django项目中,用户可以注册并填写一些ModelForms,他们可以使用自己的数据填充现有模型。

问题是登录后,任何用户不仅可以看到自己的数据,还可以看到其他用户创建的数据。 我需要避免这种情况 每个用户都应该能够查看,修改和独占自己的数据。

每个模型都有属性user,该ForeignKey链接到User
我可能在观点中遗漏了什么吗?
它们只是基于类的视图,没有引用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

是否有正确的程序来保持每个用户与其他用户分开?

1 个答案:

答案 0 :(得分:2)

您可以获取当前用户,该用户正在请求查看并仅过滤其记录,如下所示

def abspath(relpath):

    import os
    absdir = os.path.realpath('__file__')
    absdir = absdir.split('_')[0].replace('\\', '/') 
    filename = str(absdir + relpath )
    print (filename)

    return filename;