我是Python和Django的總新手,並且正在通過http post傳遞數據到一個簡單的web應用程序。我瀏覽了Django教程,對於教授的內容有了很好的理解,但我並沒有將urls.py正則表達式濾掉。我已成功使用urlopen()作爲http get。將它用於POST不太成功。看起來好像我的app urls.py(不是項目urls.py)不允許POST進入我的應用程序views.py。非常有意思的是,我想通過POST獲取我被動的數據,並將其返回到我的回覆中。下面是我有:django - 配置urls.py正則表達式來處理urlopen文章
我的項目urls.py:
urlpatterns = patterns('',
url(r'^timeapp/', include('timeapp.urls')),
url(r'^datasink/', include('datasink.urls')),
url(r'^admin/', include(admin.site.urls)),
)
datasink/urls.py:
urlpatterns = patterns('',
(r'^$', views.index),
)
datasink/views.py
def index(request):
if request.method == 'GET':
return HttpResponse("This was a GET")
else:
return HttpResponse("This was a not a GET ... POST?")
客戶端
from urllib2 import Request, urlopen, URLError, build_opener, HTTPHandler
import urllib
url = "http://127.0.0.1:8080/datasink/"
data = {'name':'joe'}
encodedData = urllib.urlencode(data)
req = Request(url)
req.add_data(encodedData)
try:
response = urlopen(req)
print "We received the following response from our httpREQ: " +response.read()
print "The response.geturl(): " +response.geturl()
except URLError as e:
if hasattr(e, 'reason'):
print 'We failed to reach a server.'
print 'Reason: ' +str(e.reason) +str(e.code)
elif hasattr(e, 'code'):
print 'The server couldn\'t fulfill the request.'
print 'Error code: ' + str(e.code)
else:
pass
錯誤在服務器端:在客戶端
Exception AttributeError: AttributeError("'_DummyThread' object has no attribute 'Thread_block'",) in ignored [02/Apr/2013 05:15:57] "POST /datasink HTTP/1.1" 500 54048
消息:
We failed to reach a server. Reason: INTERNAL SERVER ERROR
任何指導將不勝感激。我一直拉着我的頭髮嘗試各種正則表達式......沒有運氣。
我剛建立了一個全新的項目,只是爲了看看這是否會改變事情,但我有同樣的問題。我99%相信項目urls.py正在過濾我的POST,但我對正則表達式知之甚少,不知道爲什麼。 – user2234592
只是想通了。默認的Django項目打開CSRF。在我的項目settings.py文件中,我註釋掉了django.middleware.csrf.CsrfViewMiddleware行,並且POST工作。現在是時候取消註釋並創建一個CSRF令牌。 – user2234592