我有很多需要授权的方法。因此,我不是一遍又一遍地编写相同的代码,而是想简化它。据我所知,我无法使用@login_required
重定向到登录页面,而我还没有。 (用户通过所有模板中包含的下拉菜单登录系统)。我只是想在不重定向的情况下提高PermissionDenied。
get_profile(request):
if request.user.is_authenticated():
do things
else:
raise PermisionDenied
一种解决方案是使用自定义装饰器:
def login_required_no_redirect(f):
def wrap(request, *args, **kwargs):
if request.user.is_authenticated():
return f(request, *args, **kwargs)
else:
raise PermissionDenied
wrap.__doc__ = f.__doc__
wrap.__name__ = f.__name__
return wrap
但它需要传递一个函数。所以我不能将@login_required_no_redirect()
放在方法之上。它需要传递一些函数作为参数。我从哪里得到它?有很多没有参数的django装饰器,如何编写类似的装饰?
致以最诚挚的问候,
答案 0 :(得分:1)
Django已有一个@permission_required装饰器。
如果给出了raise_exception参数,则装饰器将引发PermissionDenied,提示403(HTTP Forbidden)视图,而不是重定向到登录页面。