我目前正在创建大量视图,并且在每个视图中,只有用户才有权访问该视图并创建或编辑模型。
根据视图,我在get_context_data或get_object中放置了一个小权限IF语句。
虽然以下工作我想让它更干,因为我有超过20个需要它的视图:
def get_context_data(self, **kwargs):
context = super(SpaceCreate, self).get_context_data(**kwargs)
house = House.objects.get(pk=self.kwargs['pk'])
# CHECK IF USER HAS PERMISSION TO MAKE CHANGES TO THE MODEL
if house.owner != self.request.user:
raise PermissionDenied
或在get_object()中,以及更多权限检查:
def get_object(self, *args, **kwargs):
obj = super(SpaceManage, self).get_object()
house = House.objects.get(pk=self.kwargs['pk'])
space = Space.objects.get(pk=self.kwargs['space_pk'])
if space.house.owner != self.request.user and house.pk != space.house.pk:
raise PermissionDenied
return space
虽然我已经阅读了很多关于创建权限(https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Authentication)的内容,但它们似乎适用于我们希望许多用户拥有该权限的情况,而不是检查用户是否具有编辑模型的权限已经创造出来了。
另一种可能性(在我看来)是使用mixins,但我似乎并不了解它们如何工作以及如何实现它们。
我想要实现的目标是:
用户只能创建,更新和删除他们创建的模型,而无需在视图中反复使用相同的代码。
编辑1:根据@ Lemayzeur的评论,创建一个Mixin是最好的方法。任何例子或解释都会非常有用。