【问题标题】:django - configure urls.py regex to process an urlopen postdjango - 配置 urls.py 正则表达式来处理 urlopen 帖子
【发布时间】:2013-03-23 07:37:26
【问题描述】:

我是 Python 和 Django 的新手,我正在尝试通过 http post 将数据传递到一个简单的 Web 应用程序。我浏览了 Django 教程,对所教的内容有一个不错的理解,但我并没有完全过滤掉 urls.py 正则表达式。我已成功使用 urlopen() 作为 http get。使用它来发布并不是那么成功。似乎我的应用程序 urls.py(不是项目 urls.py)不允许 POST 访问我的应用程序views.py。最终,我想通过 POST 获取我被动的数据并将其返回到我的响应中。这是我所拥有的:

我的项目 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' 对象没有 属性 'Thread_block'",) 在 忽略 [02/Apr/2013 05:15:57]“POST /datasink HTTP/1.1”500 54048


客户端消息:

我们无法访问服务器。原因:内部服务器错误


任何指导将不胜感激。我一直在尝试各种正则表达式……不走运。

【问题讨论】:

  • 我刚刚建立了一个全新的项目,只是想看看这是否会改变事情,但我有同样的问题。我对 urls.py 项目正在过滤我的 POST 有 99% 的信心,但我对正则表达式的了解还不够,不知道为什么。
  • 刚刚想通了。默认的 Django 项目开启 CSRF。在我的项目 settings.py 文件中,我注释掉了 django.middleware.csrf.CsrfViewMiddleware 行并且 POST 工作。现在是时候取消注释并创建一个 CSRF 令牌了。

标签: regex post django-urls urlopen


【解决方案1】:

datasinkdatasink/ 路径有所不同。

在这种情况下,您定义了datasink/,但没有处理datasink

尝试改变

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

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

在您的客户端中查看这是否解决了问题。

【讨论】:

  • 好收获。现在我在使用 POST 时遇到 403 错误,而 GET 仍然可以正常工作。
  • 这个问题要了我的命......我仍然认为我没有正确重定向。 GET 工作正常,POST 给我 403 并且没有点击应用程序 urls.py。
  • @user2234592 或许你可以试试解决方案here
猜你喜欢
  • 2014-06-14
  • 2013-07-12
  • 2012-07-22
  • 1970-01-01
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多