【问题标题】:Flask unit test throwing Error: has no attribute 'csrf_token' in Jinja2 template烧瓶单元测试抛出错误:Jinja2 模板中没有属性“csrf_token”
【发布时间】:2020-05-25 03:01:45
【问题描述】:

在我的单元测试中,我已经禁用了 CSRF 使用

WTF_CSRF_ENABLED = False

一个失败的示例测试用例

def test_get_tags(self):
    tag_name = 'tag_1'
    r = self.client.get(url_for('tag.tags'))
    self.assertIn(tag_name, r.get_data(as_text=True))

但在我的模板中,我调用了 csrf 令牌。

{% for form in tag_forms%}
    {{form.csrf_token}}
    {{form.tag_name}}
    {{form.update}}
    {{form.delete}}
{% endfor %}

这会导致以下错误

jinja2.exceptions.UndefinedError: 'app.tag.forms.UpdateTagForm object' has no attribute 'csrf_token'

我猜这个错误是由于我禁用了 CSRF 令牌。如何解决?

【问题讨论】:

    标签: python flask jinja2 python-unittest flask-wtforms


    【解决方案1】:

    在您的 jinja 模板中,首先检查该值是否已设置,然后是否包含它。

    {% if 'csrf_token' in form %}
      {{form.csrf_token}}
    {% endif %}
    

    【讨论】:

    • 感谢您的回答。这对我有用。我已经投票了。有人可以确认这是否是执行此操作的“标准”方式吗?
    猜你喜欢
    • 2021-08-11
    • 1970-01-01
    • 2020-09-08
    • 2021-09-07
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    相关资源
    最近更新 更多