我的应用程序中有与特定用户相关的特定主题。如何限制他们只访问他们的科目?
我有想像
一样使用usersub = get_object_or_404(UserSubject, user=request.user, subject=subject)
如果没有关系,则会抛出404错误。但是有没有其他方法可以使用user_passes_test装饰器来完成它?
答案 0 :(得分:1)
好吧,你可以使用exists
if UserSubject.objects.filter(user=request.user, subject=subject).exists():
# what you want to do
else:
# do something else
或只是filter
usersub = UserSubject.objects.filter(user=request.user, subject=subject)
if usersub:
# do something
else:
# do something else
这些会进行检查,但不会引发异常或返回Http404
。
更新:您必须编写自己的装饰器,因为user_passes_test
可以处理您的情况。这是一个示例装饰器:
from django.http import HttpResponseForbidden
def subject_test(f, subject):
def test_user_for_subject(request, subject, *args, **kwargs):
if not UserSubject.objects.filter(user=request.user, subject=subject).exists():
retun HttpResponseForbidden('Access denied!')
else:
return f(request, *args, **kwargs)
return test_user_for_subject
在你的观点中:
@subject_test('your subject here')
def your_view_is_in_here(request):
...
但困难的是,除非可以从request