title: Function to create in-memory zip file and return as http response
body: <p>I am avoiding the creation of files on disk, this is what I have got so far:</p>
  
  <pre><code>def get_zip(request):
      import zipfile, StringIO
      i = open('picture.jpg', 'rb').read()
      o = StringIO.StringIO()
      zf = zipfile.ZipFile(o, mode='w')
      zf.writestr('picture.jpg', i)
      zf.close()
      o.seek(0)
      response = HttpResponse(o.read())
      o.close()
      response['Content-Type'] = 'application/octet-stream'
      response['Content-Disposition'] = "attachment; filename=\"picture.zip\""
      return response
  </code></pre>
  
  <p>Do you think is correct-elegant-pythonic enough? Any better way to do it?</p>
  
  <p>Thanks!</p>