2012-08-03 148 views
2

views.pyDjango的CSRF令牌

from django.core.context_processors import csrf 
context.update(csrf(request)) 
{'csrf_token': <django.utils.functional.__proxy__ object at 0xae0f4ec>} 

我想CSRF令牌添加到像above.But csrf_token价值的意见我forms.im发生CSRF令牌给出了一些代理对象像所示的而不是字符串。我使用django 1.3。提前感谢任何帮助。

+0

你为什么要手工做这个?你不是在模板中使用'RequestContext'和'{%csrf_token%}'。 – Rohan 2012-08-03 09:48:46

+0

@Rohan我不是使用RequestContext的,但我M在模板 – shiva 2012-08-03 09:50:17

回答

6

的跨站请求伪造方法是懒,它返回一个无极/代理。一旦在模板中调用了这个对象,模板引擎就会将这个对象统一起来,从而触发真正的方法。

试试这个:

print unicode(csrf(request)['csrf_token']) 
+0

使用{%csrf_token%} @Willain是现在我得到在模板中的string.but我没有隐藏字段eventhough I M使用{%csrf_token%}模板标签。 – shiva 2012-08-03 10:00:59

+0

在中间件CsrfViewMiddleware? https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#how-to-use-it – Willian 2012-08-03 10:02:37

+0

@Willain是的,我确实有django.middleware.csrf.CsrfViewMiddleware – shiva 2012-08-03 10:05:37