小编trd*_*trd的帖子

带有文件错误的Django REST Framework POST数据(使用ModelResource)

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

class MyImageResource(ModelResource):
    model = Image
Run Code Online (Sandbox Code Playgroud)

并在urlpatters中:

url(r'^image/$', ListOrCreateModelView.as_view(resource=MyImageResource)),
url(r'^image/(?P<pk>[^/]+)/$', InstanceModelView.as_view(resource=MyImageResource)),
Run Code Online (Sandbox Code Playgroud)

图像模型很简单:

class Image(models.Model):
    image = models.ImageField(upload_to=get_file_path)
    name = models.CharField(max_length=256, blank=True)
    description = models.TextField(blank=True)
Run Code Online (Sandbox Code Playgroud)

在浏览器中测试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()
Run Code Online (Sandbox Code Playgroud)

我也尝试了MultipartPostHandler:

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

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

params = { …
Run Code Online (Sandbox Code Playgroud)

django post file urllib2 django-rest-framework

5
推荐指数
1
解决办法
1530
查看次数

标签 统计

django ×1

django-rest-framework ×1

file ×1

post ×1

urllib2 ×1