django - 配置urls.py正则表达式来处理urlopen文章

django - 配置urls.py正则表达式来处理urlopen文章

问题描述:

我是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


任何指导将不胜感激。我一直拉着我的头发尝试各种正则表达式......没有运气。

+0

我刚建立了一个全新的项目,只是为了看看这是否会改变事情,但我有同样的问题。我99%相信项目urls.py正在过滤我的POST,但我对正则表达式知之甚少,不知道为什么。 – user2234592

+0

只是想通了。默认的Django项目打开CSRF。在我的项目settings.py文件中,我注释掉了django.middleware.csrf.CsrfViewMiddleware行,并且POST工作。现在是时候取消注释并创建一个CSRF令牌。 – user2234592

datasinkdatasink/路径中有所不同。

在这种情况下,您已经定义了datasink/但没有任何操作datasink

尝试改变

url = "http://127.0.0.1:8080/datasink" 

url = "http://127.0.0.1:8080/datasink/" 

在客户端,看是否能解决问题。

+0

好的。现在我得到一个403错误与POST和GET仍然正常工作。 – user2234592

+0

这个问题正在导致我的死亡...我仍然没有正确重定向的心态。 GET工作正常,POST给我403,并没有打到应用程序urls.py. – user2234592

+0

@ user2234592也许你可以尝试解决方案[这里](http://*.com/questions/10663446/post-method-always-return-403-forbidden) – user2172816