Python 如何在django api中发送图像?
我正在尝试将我的图像从django服务器发送到应用程序。有两种方法解决上述问题: 1) 发送图像的url 2) 发送编码图像 由于以下原因,我不确定使用哪一个:-Python 如何在django api中发送图像?,python,django,django-models,Python,Django,Django Models,我正在尝试将我的图像从django服务器发送到应用程序。有两种方法解决上述问题: 1) 发送图像的url 2) 发送编码图像 由于以下原因,我不确定使用哪一个:- return JsonResponse({'image':model.image.url}) 如果我选择第一条路。Json响应会更快,但若用户返回一个页面两次,它将在服务器上发出两个请求。而且,不可能缓存图像 在第二种方法中,我可以在客户端应用程序中缓存图像,但编码是否会增加服务器的总体响应时间 这是从api发送图像的推荐方法。 目
return JsonResponse({'image':model.image.url})
return JsonResponse({'image':model.image.url})
答案是方法1。编码图像会破坏你的服务器响应时间,除非它们像缩略图或头像一样非常小,即使这样,我也不会养成这样的习惯。我见过应用程序因这种做法而变得不可用。大多数浏览器会在会话期间自动缓存图像。如果服务器性能是一个大问题,而映像又在拖后腿,通常我会将映像存储在某种静态文件主机(如s3)中,并在现实环境中使用边缘缓存。答案是方法1。编码图像会破坏你的服务器响应时间,除非它们像缩略图或头像一样非常小,即使这样,我也不会养成这样的习惯。我见过应用程序因这种做法而变得不可用。大多数浏览器会在会话期间自动缓存图像。如果服务器性能是一个大问题,而映像又在拖后腿,通常我会将映像存储在某种静态文件主机(如s3)中,并在现实环境中使用边缘缓存。您可能希望使用#1并通过URL发送。通常,您不会直接从服务器交付映像文件,而是从S3或GCS之类的云存储中交付。更高级的设置甚至包括CDN(内容交付网络),如Fastly或Cloudfront,以实现轻松缓存并在全球范围内服务流量
如果您选择通过编码图像发送(例如,在base64中),请注意,主体响应大小的增加将增加难以置信的响应时间,甚至可能导致在30秒左右完全超时。用户最终会有更长的响应时间,更容易流失,而您为服务器支付的费用也会更高。您可能希望使用#1并通过URL发送。通常,您不会直接从服务器交付映像文件,而是从S3或GCS之类的云存储中交付。更高级的设置甚至包括CDN(内容交付网络),如Fastly或Cloudfront,以实现轻松缓存并在全球范围内服务流量
如果您选择通过编码图像发送(例如,在base64中),请注意,主体响应大小的增加将增加难以置信的响应时间,甚至可能导致在30秒左右完全超时。用户最终会有更长的响应时间,更容易流失,而您为服务器支付的费用也会更高。@brayan60那么,既然我只会获得一个url,我该如何在我的应用程序中缓存这些图像呢。我使用的是一个混合客户端appI回答了这个问题:浏览器通常会自动缓存图像,所以你不必担心。事实上,说服浏览器在图像经常使用静态url更改的情况下不缓存图像会有点棘手。您可以使用浏览器的缓存说明在图像上设置某些标题。如果这真的是一个问题,你可以使用边缘缓存。@brayan60那么我如何在我的应用程序中缓存这些图像,因为我只能得到一个url。我使用的是一个混合客户端appI回答了这个问题:浏览器通常会自动缓存图像,所以你不必担心。事实上,说服浏览器在图像经常使用静态url更改的情况下不缓存图像会有点棘手。您可以使用浏览器的缓存说明在图像上设置某些标题。如果这真的是一个问题,您可以使用边缘缓存。是否有任何方法可以缓存url中的图像,以便它们可以在不向服务器发出请求的情况下重新使用?为此,您需要CDN,如果发送了
if None Match
标头,则将使用Etags向客户端发出资源未更改的信号。是否有任何方法可以缓存url中的图像,以便在不向服务器发出请求的情况下重新使用这些图像?为此,您需要CDN,如果发送了if None Match
标头,则将使用ETag向客户端发出一个资源未更改的信号。