Има Project
модел с отношение ManyToMany към User
модел, използвайки таблица за свързване. Ако даден потребител не е член на проект (не е в таблицата за присъединяване), искам да попреча на потребителя да има достъп до изглед, който показва конкретния проект.
Знам, че това може да бъде решено с проста инструкция if в метода за изглед или персонализиран филтър в шаблона, но бих искал да мога да направя това с персонализиран декоратор. Това възможно ли е? Ако е така, как би могло да се направи?
Нещо като:
def may_user_view_this(function):
def wrapper(request, *args, **kwargs):
user = request.user
project = Project.objects.get(id=???????) #id
if not project.has_user(user):
return HttpResponse('You cannot view this.')
else:
return function(request, *args, **kwargs)
return wrapper
@may_user_view_this() # if not go the specific url
def my_view(request, page_id=None):
# do stuff and render
Как мога да получа достъп до параметъра page_id
, изпратен до my_view
от функцията декоратор?