我想制作装饰器,阻止用户查看其他个人资料,但可以查看自己的个人资料。如果用户的id已在url中传递为http://example.com/user/?id=5,我想在我的django装饰器中获取值id = 5。我怎么能得到它的任何一个例子?
def admin_or_ownership_required(owner):
def check_admin_or_owner(user):
# pk = request.GET.get('pk', None)
# if pk is not None and pk == user.id:
# return True
if owner == 'Account':
if user.is_superuser or (user.is_active and (user.role == 'admin' or user.role == 'owner')):
return True
else:
return False
elif owner == 'User':
if user.is_superuser or (user.is_active and (user.role == 'admin' or user.role == 'owner')):
return True
else:
return False
else:
return False
return user_passes_test(check_admin_or_owner)
这是我的观看代码
class AccountDetailView(DetailView):
template_name = 'api/account_detail.html'
model = Account
@method_decorator(admin_or_ownership_required('Account'))
def dispatch(self, *args, **kwargs):
return super(AccountDetailView, self).dispatch(*args, **kwargs)
如何在admin_or_ownershipl_required装饰器
中使用request参数答案 0 :(得分:0)
def check_login(method):
@functools.wraps(method)
def wrapper(request, *args, **kwargs):
if request.GET['id'] == request.user.id
# Give your redirect url
return method(request, *args, **kwargs)
return wrapper
答案 1 :(得分:0)
您可以在视图中使用mixin,限制案例查询集,例如:
class MixinRestrictedAccount(object):
def get_queryset(self):
return Account.objects.filter(id=self.request.user.id)
class AccountDetailView(MixinRestrictedBox, DetailView):
[..]
答案 2 :(得分:0)
尝试转储kwargs的值,从那里你可以访问url参数。例如 : 如果你有像Url这样的网址:
/users/(?P<username>\w+)/$
您可以通过kwargs参数访问该值,该参数在装饰器方法中传递。您可以通过以下方式访问:
kwargs.get("username")
如果您想通过GET方法访问url参数,那么您可以尝试这样:
request.GET.get("username")
表示URL:
/users/?username=dominic
谢谢。