如何使用urllib发布到Django 1.2表单?

时间:2010-09-02 04:58:36

标签: django django-forms

关于this其他SO问题,我尝试使用urlencode和urlopen将数据发布到表单。但是,当我使用它时,Django 1.2给了我一个CSRF验证失败错误。有解决方法吗?

感谢。

2 个答案:

答案 0 :(得分:14)

向其他表单提交数据与您的情况之间的区别在于您必须首先获得CSRF令牌。这可以通过首先在页面上执行GET请求然后使用合适的解析器解析csrfmiddlewaretoken来完成。

另请注意,您需要安装一个cookie jar才能使其正常工作。

例如:

#!/usr/bin/python
import urllib, urllib2, cookielib
from BeautifulSoup import BeautifulSoup

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)

url = urllib2.urlopen('http://localhost:8000/accounts/login/')
html = url.read()

doc = BeautifulSoup(html)
csrf_input = doc.find(attrs = dict(name = 'csrfmiddlewaretoken'))
csrf_token = csrf_input['value']

params = urllib.urlencode(dict(username = 'foo', password='top_secret', 
       csrfmiddlewaretoken = csrf_token))
url = urllib2.urlopen('http://localhost:8000/accounts/login/', params)
print url.read()

答案 1 :(得分:1)

csrf_exempt装饰器用于处理请求的视图

from django.views.decorators.csrf import csrf_exempt