Django:如何在javascript中访问当前登录用户的ID?

Posted

技术标签:

【中文标题】Django:如何在javascript中访问当前登录用户的ID?【英文标题】:Django : How to access current logged in user's id in javascript? 【发布时间】:2016-04-15 15:01:21 【问题描述】:

我在视图集中定义了一个 get_queryset 方法。

class BooksViewSet(ReadOnlyModelViewSet):
    serializer_class = BooksSerializer
    permission_classes = (IsAuthorizedToAccess, )

    def get_queryset(self):
        queryset = Books.objects.all();
        return queryset

使用 javascript 我想在一侧显示当前用户的书籍,在右侧显示其他所有用户的书籍。 我完成了所有代码,但无法访问我的 js 文件中的当前用户 ID。

if(auther.id == "current user id")


我想像这样访问用户 ID。 对于我所做的所有搜索,我知道如何将此用户 ID 添加为隐藏字段或传递此 ID。但我不能,因为该方法只允许返回查询集对象。

谁能帮我理解一下。

编辑:我的解决方案

在我看来,我定义了 get_context_data 方法。

 def get_context_data(self, *args, **kwargs):
    ctx = super(class_name, self).get_context_data(*args, **kwargs)
    ctx["author_id"]=self.request.user.id
    return ctx

在我的模板中,我定义了一个隐藏字段:

<input type="hidden" id="userId" value=author_id>

在我的 JS 中:

var x= document.getElementById("author_id").value;

【问题讨论】:

我认为您可以将用户 ID 添加到上下文中 @JonasGrumann 你能解释一下上下文是什么意思吗? 在第一个示例中,他将一个数字添加到上下文中,因此它将在模板中可用:docs.djangoproject.com/en/1.9/ref/class-based-views/… 在 ReadOnlyModelViewSet 中同时使用 get_queryset 和 get_context_data 方法可以吗 @JonasGrumann 非常感谢。 【参考方案1】:

从 Django 2.1 开始,专门为此用例引入了一个新的内置模板标签:json_script。

https://docs.djangoproject.com/en/dev/ref/templates/builtins/#json-script

新标签将安全地序列化模板值并防止 XSS。

不需要设置任何上下文变量,因为 request.user 已经包含在每个视图中:

template.html

 request.user.id|json_script:"user_id" 

script.js

const user_id = JSON.parse(document.getElementById('user_id').textContent);

【讨论】:

【参考方案2】:

您也可以使用模板标签。喜欢 author.id 您还可以将值分配给 javascript 变量,然后使用它

var id =  author.id 

【讨论】:

如果我的js不在我的模板中怎么办。这是一个单独的文件,我已将其包含在我的模板中。 谢谢@stefano 创建一个可以传递id的函数,然后调用yourFunction(author.id);【参考方案3】:

如果 javascript 在您的模板文件中,您可以像这样访问它:

% for author in authors %
    if('author.id' == "current user id")
    
    

% endfor %

【讨论】:

我也在尝试,但是我的 js 文件不在我的模板中,我已经包含了它。

以上是关于Django:如何在javascript中访问当前登录用户的ID?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 HTML 中的 JavaScript 在 Django 中保存模型实例

如何在javascript中访问当前范围之外的变量?

如何在javascript中更新django变量

如何在 Django 模板中获取当前 URL?

如何在 Django 模板中获取当前 URL?

如何在 Django 模板中获取当前 URL?