问题是-
@is_premium_user
def sample_view:
.......
......
我想要的某些意见,只有该网站的高级用户可以访问。
我如何在我的项目中的各种应用程序中使用这个装饰器?
发布于 2011-03-29 07:44:31
你不必为此编写自己的装饰器,因为user_passes_test
已经包含在Django中了。
并且有一个扩展了这个装饰器的代码片段(group_required_decorator
),它应该非常适合您的用例。
如果你真的想编写自己的装饰器,那么网上有很多good documentation。
而且,要(重新)使用装饰器,只需将装饰器放在path上的模块中,您就可以从任何其他模块导入它。
发布于 2011-05-25 09:22:54
使用了上面的各种链接,无法让它们工作,然后遇到了这个非常简单的链接,我对它进行了调整。http://code.activestate.com/recipes/498217-custom-django-login_required-decorator/
from functools import wraps
from django.http import HttpResponseRedirect
def authors_only(function):
@wraps(function)
def wrap(request, *args, **kwargs):
profile = request.user.get_profile()
if profile.usertype == 'Author':
return function(request, *args, **kwargs)
else:
return HttpResponseRedirect('/')
return wrap
使用@wraps
比手动重写更好,就像做wrap.__doc__ = fn.__doc__
__一样。在其他方面,它确保您的包装器函数与包装的函数具有相同的名称。
发布于 2013-03-29 15:06:28
多亏了arie,这个答案帮了我很大的忙,但它对我不起作用。
当我找到这个代码片段时,我让它正常工作:http://djangosnippets.org/snippets/983/
这个解决方案对我很有效:
帮助器函数
这个函数的好处是可以在其他地方重用,作为user.is_authenticated
的替代。例如,它可以作为模板标记公开。
def my_custom_authenticated(user):
if user:
if user.is_authenticated():
return user.groups.filter(name=settings.MY_CUSTOM_GROUP_NAME).exists()
return False
装饰器
我只是把这个放在我的views.py
的顶部,因为它太短了。
def membership_required(fn=None):
decorator = user_passes_test(my_custom_authenticated)
if fn:
return decorator(fn)
return decorator
使用it的
@membership_required
def some_view(request):
...
https://stackoverflow.com/questions/5469159
复制相似问题