如何从 Django 获取用户组?

How to get user groups from Django?

提问人:dawn bringer 提问时间:10/23/2023 更新时间:10/23/2023 访问量:45

问:

我正在尝试获取 Django 中用户中存在的用户组,但不幸的是,在控制台中它说:

Uncaught ReferenceError: user is not defined
    at 6/:643:33

该函数应该根据用户是否有这些组来重定向用户。

这是我当前的代码:

if (data.includes('The process is done.')) {
alert('Success!.');
setTimeout(function () {
  if (user.groups.filter(name='group1').exists() || user.groups.filter(name='group2').exists()) {
    window.location.href = "{% url 'red' %}";
  } else {
  window.location.href = "{% url 'blue' %}";
  }
  }, 2000);
  }

上面的代码位于成功的 AJAX 函数中。

HTML Django AJAX

评论

0赞 willeM_ Van Onsem 10/23/2023
user在 JavaScript 中是未知的:Django 是一个后端框架,它在服务器端渲染数据。JavaScript 对模型、视图等一无所知。它只是得到了一个HTTP响应。
0赞 dawn bringer 10/23/2023
@WillemVanOnsem我明白了,但是我如何将这些组解析到JS中?我是否必须在 views.py 中创建一个单独的函数才能让组过滤它们?(仅供参考:我不是全栈工程师)
0赞 willeM_ Van Onsem 10/23/2023
您可以在 AJAX 发出请求的位置创建一个视图,然后查找用户(和相应的组),例如传递组的名称,或者如果您要过滤,则仅传递 /。当然,这取决于“整体应用程序”,你想做什么。TrueFalse
0赞 dawn bringer 10/23/2023
@WillemVanOnsem 目前,AJAX 基于一个函数从提交后重定向的视图中重定向...所以我必须使另一个函数与主函数分开,或者?我不确定我是否了解大局。
0赞 Linh Nguyen 10/23/2023
您可以通过在 HTML 端调用 {{ request.user.groups }} 来获取用户组对象。{{ }} 的重点是将 Django 模板对象渲染为 HTML 。不,你不能直接在 javascript 上调用 django 模板变量

答:

0赞 Kiarash Gh 10/23/2023 #1

获取用户组的一种方法是将相关的用户信息与 AJAX 响应一起发送,你可以修改你的 Django 视图,以在响应中包含用户的组信息,如下所示:


from django.http import JsonResponse
from django.contrib.auth.decorators import login_required


@login_required
def ajax_function(request):
    #your logic goes here

    user_groups = list(request.user.groups.values_list('name', flat=True))
    data = {
        # other informations that you might need
        'message': 'The process is done.',
        'user_groups': user_groups,
    }

    return JsonResponse(data)

现在,您可以在 JavaScript 中访问:user_groups

if (data.message === 'The process is done.') {
alert('Success!.');
setTimeout(function () {
  if (data.user.groups.includes('group1') || data.user.groups.includes('group2')){
    window.location.href = "{% url 'red' %}";
  } else {
  window.location.href = "{% url 'blue' %}";
  }
  }, 2000);
  }

我希望这对你有所帮助。

评论

0赞 dawn bringer 10/23/2023
是的,这帮助很大。我不得不做一些微调,但我设法让它工作。:)