我有很多意见,并且不只一种用户类型。我想要某些可以由特定用户类型查看的视图,而其他用户则看不到。
例如,只有公司才能看到此视图,为此,我这样做如下:
@login_required
def only_company_can_view(request):
if not Company.objects.filter(owner_id=request.user.id).exists():
return HttpResponse('Permission Denied. Only Company can see this')
# > rest of the logic
return render(request, 'template.html')
并且在此之上工作非常好,并且解决了我的问题,但是我不喜欢这样。因为我不想每次都为公司相关的观点写其余的观点。
因此,我正在寻找解决方案,以便可以使用装饰器或其他最佳做法
在这种情况下,有人可以帮助我吗?
您可以将逻辑包装在装饰器中:
from django.core.exceptions import PermissionDenied
from functools import wraps
def requires_company(view):
@wraps(view)
def _view(request, *args, **kwargs):
if not Company.objects.filter(owner_id=request.user.id).exists():
raise PermissionDenied
return view(request, *args, **kwargs)
return _view
然后,将装饰器用于:
@login_required
@requires_company
def only_company_can_view(request):
# … rest of the logic …
return render(request, 'template.html')
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句