我能否在Django模板中使用Auth应用程序的权限检查?(我想在模板末尾为特权用户显示一个简单的表单)
更重要的是,我是否应该这样做,还是这不是"Django way"?
我能否在Django模板中使用Auth应用程序的权限检查?(我想在模板末尾为特权用户显示一个简单的表单)
更重要的是,我是否应该这样做,还是这不是"Django way"?
如果您想在模板中检查权限,以下代码就足够了:
{% if perms.app_label.can_do_something %}
<form here>
{% endif %}
这里的模型是指用户需要通过权限才能查看表单的模型。
请参考https://docs.djangoproject.com/en/stable/topics/auth/default/#permissions获取更多示例。
当前登录用户的权限存储在模板变量
{{ perms }}
中。
(这需要启用以下上下文处理器:django.contrib.auth.context_processors.auth
)
perms.app_label.foobar
将始终为true,即使您拼写了权限名称也错了。 - Flimm在 Django 2.0+ 中测试通过
如果你想在模板(.html)中查看已登录用户拥有的所有权限,请打印:
{{ perms.app_name }}
或者
{{ perms }}
为了检查用户是否具有权限,请使用:
{% if perms.app_name.change_model_name_lower_cased %}
例如:
{% if perms.Utilization.change_invoice %}
这里:Utilization是我的应用程序名称,Invoice是模型名称。
请注意,通常有4种类型的权限:
另外,如果您想查看用户由于所属组而拥有的所有权限,请启动Django shell...
user = User.objects.get(username='somename')
user.get_group_permissions()
这里列出的所有权限都是由他所属的用户组决定的。
还有一种独特的方法:
{% if 'app_label.permission' in perms %}
<form here>
{% endif %}
例子:
{% if 'auth.view_group' in perms %}
<p> Hello World! </p>
{% endif %}
当您想要使用默认/自定义身份验证权限时,此方法非常方便,无论您是否为模型创建了应用程序,因为此方法不需要应用程序名称。它只需要来自您的权限表的权限名称。
您也可以使用and/or命令进行多个检查:
{% if 'auth.view_group' in perms and 'auth.add_group' in perms %}
<form here>
{% endif %}
对于那些使用Jinja模板并且像我一样为此问题苦苦挣扎了几个小时/几天的人...
request
对象添加到其中:# in settings.py
TEMPLATES = [
{
"BACKEND": "django.template.backends.jinja2.Jinja2",
'DIRS': ['jinja2'],
"APP_DIRS": True,
"OPTIONS": {
'environment': 'main.jinjaconfig.env.environment',
}
},
# Other template backends...
]
# main/jinjaconfig/env.py
from django.template.context_processors import request
from jinja2 import Environment
# ...
def environment(**options):
env = Environment(**options)
# Update globals with the functions and objects you need, here 'request'
env.globals.update({
'request': request,
# Other globals like 'static', 'url', ...
})
return env
request
对象,以及request.user
、request.user.has_perm()
和所有与用户相关的函数:{% if request.user.has_perm('app_label.can_do_something') %}
{# Stuff .. #}
{% endif %}