在Django视图中创建CSRF令牌

时间:2019-02-12 19:39:38

标签: django csrf

我有一个特定的表单,该表单是从数据库动态创建的,我想在Django模板中使用它。问题在于它需要嵌入一个csrf令牌。因此,在我的视图内部,我想创建此令牌,以便可以将其插入到表单中。但是,我没有运气。部分有效:

    from django.middleware import csrf
    token = request.META.get('CSRF_COOKIE', None)
    if token is None:
        token = csrf._get_new_csrf_key()
        request.META['CSRF_COOKIE'] = token
        request.META['CSRF_COOKIE_USED'] = True

第一部分效果很好-如果存在令牌,则使用它。但是,如果令牌为None,并且调用_get_new_csrf_key(),则它第一次无效-我必须先刷新页面才能工作。在视图内创建令牌的正确方法是什么?

其他说明:

该表单来自数据库。因此,我有一个数据库记录,其中包含我读入变量的形式:

page_content = '<form>.....__csrf-placeholder__</form'

然后,在模板中,我这样做:

{{ page_content }}

所以这就是为什么我不能在模板中使用{%csrf_token%}的原因。现在,我在视图中使用了replace函数,因此将 csrf-placeholder 替换为实际令牌。所以这就是为什么我要这样做。

0 个答案:

没有答案