【问题标题】:Django returning dictionary from front end?Django从前端返回字典?
【发布时间】:2021-04-26 05:41:14
【问题描述】:

我在我的一个 Django 视图中将字典从前端传递到后端。设置是这样的:

$.ajax({
        type: "POST",
        url: '/my/url',
        data: {
            'patients': '{{ appointments.appointments.items }}'
        },
        dataType: 'json',
                async: false,
        success: function (data) {
              console.log("yay")
        }
      });

它正在传回一个名称字典等,然后我在 python 后端检索它,如下所示:

if request.method == "POST":
    patients = request.POST.get("patients", None)
    print("patients are", patients)

但是,当我这样做并打印出患者 dict() 而不是获取实际字典时,我会得到如下字符串:

dict_items([(153, {'person': 'Samuel', 'time': datetime.datetime(2021, 4, 22, 17, 0, tzinfo=<UTC>), 'number': 'First'})])

不遵循字典格式/甚至真的允许 json 解析等。

我在这里做错了吗? {{appointments.appointments.items}} 只是在获取请求期间从后端传递到我的 HTML 模板页面中,我在同一个文件中使用 JavaScript 访问它。

如有任何建议,我们将不胜感激。

【问题讨论】:

  • 我建议你不要使用|safe 方法,因为它仍然允许人们执行 XSS 攻击。最好是不渲染成javascript。看到我的这个answer(我不发布它,因为它只是重复)。
  • 太棒了,谢谢!

标签: python django django-models django-views django-templates


【解决方案1】:

我觉得,可以通过添加Eval Method来解决。

patients = eval(request.POST.get("patients", None))

【讨论】:

  • 不要在不需要的时候在答案中提出 dangerous 的建议,虽然 |safe 也很危险(潜在的 XSS 攻击),但 eval 更危险。更不用说这不能解决这里的问题。
  • 好的@AbdulAzizBarkat,感谢您的建议。会不会行不通,我想知道为什么它很危险。你能说出原因吗?
  • eval 允许您执行任意代码。考虑到这个字符串来自用户,用户可以在此处发送几乎任何代码并且它将被执行,危险对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-02
  • 2011-09-18
  • 1970-01-01
  • 2020-04-14
  • 2020-05-22
  • 1970-01-01
相关资源
最近更新 更多