【问题标题】:Django outputs CSRF token as object instead of valueDjango 将 CSRF 令牌输出为对象而不是值
【发布时间】:2011-01-20 02:34:55
【问题描述】:

我在 Django 中以简单的 POST 形式处理 CSRF 令牌。模板生成以下 CSRF 输出,而不是输出令牌的值:

<input type='hidden' name='csrfmiddlewaretoken' value='{'csrf_token':django.utils.functional.__proxy__ object at 0x1255690>}' />

我在模板中使用{% csrf_token %},我该如何解决这个问题? (我使用的是 Django 1.2)

编辑:确切的表单代码是:

<form name="foo" action="url" method="POST">
   {% csrf_token %}

   <select>
       {% for key, account in accounts.items %} 
           <option value="{{ key }}">{{ account }}</option>
       {% endfor %}
   </select>
<input type="submit">    
</form>

【问题讨论】:

  • 请显示准确的模板片段。
  • 嗨丹尼尔,我已经添加了表格,希望这会有所帮助。当我执行 {{ crsf_token.csrf_token }} 时,会显示实际的令牌,但是没有整个隐藏的输入字段。

标签: django django-forms csrf django-csrf


【解决方案1】:

我找到了原因:在 settings.py 我添加了:django.middleware.csrf.CsrfViewMiddleware 但不是:django.middleware.csrf.CsrfResponseMiddleware

所以在django.middleware.csrf.CsrfViewMiddlewaredjango.middleware.common.CommonMiddleware 之后添加django.middleware.csrf.CsrfResponseMiddleware 就可以了。

【讨论】:

    猜你喜欢
    • 2021-07-14
    • 1970-01-01
    • 2014-03-19
    • 2013-08-11
    • 2016-08-03
    • 2012-03-25
    • 2012-01-26
    • 2020-10-29
    • 1970-01-01
    相关资源
    最近更新 更多