如何根据用户权限正确处理请求Django
How to properly handle request based on user's permissions Django
使用 Django,我有一个基于 class 的视图,可以从我的数据库中获取 items
的列表。事情是这个列表不应该被每个用户访问。没有管理员或 is_staff
权限的用户应该能够看到所有项目,而没有此权限的普通帐户只能访问他们的 items
.
我想知道我应该如何实现它。
有一个基于 class 的视图,我在其中检查用户是否是管理员,如果是,则取回所有项目。并有另一个基于 class 的视图,检查用户是否不是管理员,并仅为该用户取回所有项目。
或
有一个基于 class 的视图,我在其中检查用户是管理员还是非管理员,而那个 class 的视图根据 2 种不同的场景以不同方式处理请求。
我不确定“Django 方式”是什么,但我自然会选择第二种方法,但我想以防万一。
如果 “Django 方式” 是最简单、可读且最容易的,我认为这是基于 class 一次覆盖 get_queryset method
查看:
class MyView(generic.ListView):
template_name = 'my-template.html'
paginate_by = 25
def get_queryset(self):
queryset = MyModel.objects
# I dont remember if a superser is already staff
# In this case this can be replaced by: if self.request.user.is_staff: only
if self.request.user.is_staff or self.request.user.is_superuser:
queryset = queryset.filter(...filters...)
else:
queryset = queryset.filter(...other filters...)
return queryset
使用 Django,我有一个基于 class 的视图,可以从我的数据库中获取 items
的列表。事情是这个列表不应该被每个用户访问。没有管理员或 is_staff
权限的用户应该能够看到所有项目,而没有此权限的普通帐户只能访问他们的 items
.
我想知道我应该如何实现它。
有一个基于 class 的视图,我在其中检查用户是否是管理员,如果是,则取回所有项目。并有另一个基于 class 的视图,检查用户是否不是管理员,并仅为该用户取回所有项目。
或
有一个基于 class 的视图,我在其中检查用户是管理员还是非管理员,而那个 class 的视图根据 2 种不同的场景以不同方式处理请求。
我不确定“Django 方式”是什么,但我自然会选择第二种方法,但我想以防万一。
如果 “Django 方式” 是最简单、可读且最容易的,我认为这是基于 class 一次覆盖 get_queryset method
查看:
class MyView(generic.ListView):
template_name = 'my-template.html'
paginate_by = 25
def get_queryset(self):
queryset = MyModel.objects
# I dont remember if a superser is already staff
# In this case this can be replaced by: if self.request.user.is_staff: only
if self.request.user.is_staff or self.request.user.is_superuser:
queryset = queryset.filter(...filters...)
else:
queryset = queryset.filter(...other filters...)
return queryset