我有一个特定的表单,该表单是从数据库动态创建的,我想在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 替换为实际令牌。所以这就是为什么我要这样做。