【问题标题】:In Django, how can I generate csrf token when not using templates在 Django 中,不使用模板时如何生成 csrf 令牌
【发布时间】:2018-02-03 23:28:07
【问题描述】:

我正在用自己的代码编写页面,而不是使用 Django 模板。因为我忙于学习新事物并试图完成这项工作。

现在我有了一些简单的模板案例,{% csrf_token %} 工作得很好。但是他们使用了 render() 和一个模板。

我有一堆自定义 HTML,我无法立即弄清楚如何放入模板,所以我不能使用 render()。相反,我返回 HttpResponse() 应用于我的页面,这不涉及 {% csrf_token %}。

如何将 <input> 元素放入页面的表单部分?我愿意从模板生成表单,但不是页面的其余部分。

【问题讨论】:

  • 如果你的 Django 模板没有使用{%{{ 在模板引擎不会触及的任何地方。如果您将现有的 HTML 呈现为 Django 模板,则根本不会对其进行修改。如果您没有充分的理由,则无需通过在模板之外重新创建 csrf_token 来使事情复杂化。
  • 我没有使用模板,因为我(还)不知道如何使用模板获得我想要的东西。而且我有充分的理由使用 csrf_token,因为它使用 POST 方法并且会更改我的数据库。

标签: python django templates


【解决方案1】:

您可以通过从 CSRF 中间件调用适当的函数来获取 Django 模板之外的 CSRF 令牌:

from django.middleware.csrf import get_token

def your_view(request):
    csrf_token = get_token(request)
    csrf_token_html = '<input type="hidden" name="csrfmiddlewaretoken" value="{}" />'.format(csrf_token)

要记住的一点是,Django 模板并不真正关心您传递给它们的内容。他们只接触{% ... %}{{ ... }} 标签之间的内容。如果您的模板只是静态 HTML,那么 Django 模板引擎根本不会触及它,就好像您将其作为普通文件提供一样。

【讨论】:

  • 正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-01
  • 2014-08-31
  • 2010-12-20
  • 2017-05-27
  • 2015-05-18
  • 1970-01-01
  • 2019-04-08
相关资源
最近更新 更多