django图像上传休息框架和测试客户端
我想上传一个图片与休息框架,并与django测试客户端进行测试。它几乎工作,但是当我保存文件我有这个在我的文件的顶部:django图像上传休息框架和测试客户端
--BoUnDaRyStRiNg
Content-Disposition: form-data; name="plop.png"
如果我删除那些行,我可以完美阅读我的照片,但我不知道如何摆脱他们。
models.py
class GenericUser(User):
avatar = models.ImageField(upload_to=user_directory_path)
views.py
class AvatarView(APIView):
parser_classes = (FileUploadParser,)
def post(self, request):
up_file = request.data['file']
user = get_object_or_404(GenericUser, pk=request.user.id)
user.avatar.save(up_file.name, up_file)
user.save()
return Response(status=204)
tests.py
cl = Client(HTTP_AUTHORIZATION="Token {}".format(token))
with open(MY_FILE, 'rb') as f:
data = f.read()
res = cl.post('/avatar', {"plop.png" : data}, HTTP_CONTENT_DISPOSITION="attachment; filename=plop.png;")
任何提示,我怎么能做出这样的工作?
这个工作如我所料: views.py
class AvatarView(APIView):
parser_classes = (MultiPartParser,)
def post(self, request):
up_file = request.data["file"]
user = get_object_or_404(GenericUser, pk=request.user.id)
user.avatar.save(up_file.name, up_file)
user.save()
return Response(status=204)
test.py
cl = Client(HTTP_AUTHORIZATION="Token {}".format(token))
with open(MY_FILE, 'rb') as f:
res = cl.post('/avatar', {"file" : f})
试试这个:
res = cl.post('/avatar?filename=plop.png', {"plop.png" : data})
或多或少从Django文档:
with open(MY_FILE, 'rb') as f:
cl.post('/avatar', {"filename" : f})
感谢您的帮助,两种解决方案都失败了。似乎django测试客户端确实需要HTTP_CONTENT_DISPOSITION =“attachment; filename = plop.png;”来格式化一个FileUploadParser可以理解的请求我会试着找出使用wireshark的错误我想 – Jeremad
:(你是否尝试使用MultiPartParser?你正在删除的文本看起来像是多部分MIME文件的分隔符。来自DRF文档的建议,其中文件名是URL的一部分:url(r'^ upload /(?P
将URL作为URL的一部分。我正在尝试MultiPartParser – Jeremad
很高兴你的工作。:) – ostergaard