Django REST Framework发布数据时出现文件错误(使用ModelResource)

Django REST Framework发布数据时出现文件错误(使用ModelResource),django,file,post,urllib2,django-rest-framework,Django,File,Post,Urllib2,Django Rest Framework,我在Django REST Framework应用程序中试图用文件发布数据时遇到了一个很大的问题。我通过djangorestframework网站上的示例创建了一个简单的应用程序。所以我有URL文件: class MyImageResource(ModelResource): model = Image 并以不同的方式: url(r'^image/$', ListOrCreateModelView.as_view(resource=MyImageResource)), url(r'^i

我在Django REST Framework应用程序中试图用文件发布数据时遇到了一个很大的问题。我通过djangorestframework网站上的示例创建了一个简单的应用程序。所以我有URL文件:

class MyImageResource(ModelResource):
    model = Image
并以不同的方式:

url(r'^image/$', ListOrCreateModelView.as_view(resource=MyImageResource)),
url(r'^image/(?P<pk>[^/]+)/$', InstanceModelView.as_view(resource=MyImageResource)),
在浏览器中测试REST页面,效果完美。甚至用文件发布数据

我的问题是,我想创建一个简单的python应用程序来发布数据。我使用了简单的urllib2,但我得到500个内部错误或400个错误请求:

poza = open('poza.jpg', 'rb')


initial_data = (    
    {'name', 'Imagine de test REST'},
    {'description', 'Dude, this is awesome'},
    {'image', poza},
)

d = urllib.urlencode(initial_data)
r = urllib2.Request('http://localhost:8000/api/image/', data=d,
                headers={'Content-Type':'multipart/form-data'})
resp = urllib2.urlopen(r)
code = resp.getcode()
data = resp.read()
我也尝试过使用MultipartPostHandler:

import MultipartPostHandler, urllib2, cookielib
cookies = cookielib.CookieJar()

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies),
                          MultipartPostHandler.MultipartPostHandler)

params = {
    "name":"bob",
    "description":"riviera",
    "content" : open("poza.jpg", "rb")
}

opener.open("http://localhost:8000/api/image/", params)
但是相同:500或400个错误,服务器(python manage.py runserver)停止并出现以下错误:

Exception happened during processing of request from ('127.0.0.1', 64879)
Traceback (most recent call last):
  File "C:\Python27\lib\SocketServer.py", line 284, in _handle_request_noblock
    self.process_request(request, client_address)
  File "C:\Python27\lib\SocketServer.py", line 310, in process_request
    self.finish_request(request, client_address)
  File "C:\Python27\lib\SocketServer.py", line 323, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "C:\Python27\lib\site-packages\django\core\servers\basehttp.py", line 570
, in __init__
    BaseHTTPRequestHandler.__init__(self, *args, **kwargs)
  File "C:\Python27\lib\SocketServer.py", line 641, in __init__
    self.finish()
  File "C:\Python27\lib\SocketServer.py", line 694, in finish
    self.wfile.flush()
  File "C:\Python27\lib\socket.py", line 303, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 10053] An established connection was aborted by the software in yo
ur host machine
如果有人这样做了,请给我一个用文件发布数据的例子,或者告诉我发布python代码的错误。我找不到更多的例子了


服务器看起来不错,我可以在浏览器中发布数据。非常感谢。

看起来您不是在读取文件,而是在传递文件指针

尝试:


我不确定你的代码有什么问题。。。您应该尝试使用而不是urllib。这将有助于避免urllib带来的麻烦。您的机器上是否可能有某种防火墙挡住了您的去路?回复:“主机中的软件中止了已建立的连接”
Exception happened during processing of request from ('127.0.0.1', 64879)
Traceback (most recent call last):
  File "C:\Python27\lib\SocketServer.py", line 284, in _handle_request_noblock
    self.process_request(request, client_address)
  File "C:\Python27\lib\SocketServer.py", line 310, in process_request
    self.finish_request(request, client_address)
  File "C:\Python27\lib\SocketServer.py", line 323, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "C:\Python27\lib\site-packages\django\core\servers\basehttp.py", line 570
, in __init__
    BaseHTTPRequestHandler.__init__(self, *args, **kwargs)
  File "C:\Python27\lib\SocketServer.py", line 641, in __init__
    self.finish()
  File "C:\Python27\lib\SocketServer.py", line 694, in finish
    self.wfile.flush()
  File "C:\Python27\lib\socket.py", line 303, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 10053] An established connection was aborted by the software in yo
ur host machine
initial_data = (    
    {'name', 'Imagine de test REST'},
    {'description', 'Dude, this is awesome'},
    {'image', poza.read()},
)