如何确定图像是否已加载?

时间:2013-05-13 10:08:44

标签: python django image django-views

我有一个django项目正在localhost:8000上运行(例如)。

我在此地址localhost:8000/static/test.jpg中有一张图片。用户可以通过转到它的URL来打开这个图像,而不是打开包含页面。

我想知道这个图像是否在用户的浏览器中加载(通过加载包含页面或只是输入图像的URL),我想得到该请求的请求对象。

我的观点中是否可以为该特定图像设置方法?我通过互联网搜索,但没有发现任何有用的东西。任何想法或解决方案?

5 个答案:

答案 0 :(得分:0)

您是在谈论禁止热链接吗?使用在Django服务器前运行的Web服务器可以更轻松,更有效地完成这项工作。

对于Apache的一些示例,请查看https://wiki.apache.org/httpd/DisableImageHotLinking

答案 1 :(得分:0)

这只能通过自定义视图提供图片来实现。例如,您应该编写自己的视图来返回静态资源,并且不会使用标准的django静态处理程序

答案 2 :(得分:0)

首先,请注意,Django首先不应该在生产环境中提供静态文件。来自contrib/staticfiles/views.py

  

用于提供静态文件的视图和函数。这些仅用于期间   开发,不应该在生产环境中使用。

如果你想使用它,那么你可以写一个custom middleware挂钩到process_viewprocess_request来做你的东西。

答案 3 :(得分:0)

我终于做到了。例如我在localjost:8000/media/1.jpg中有一个文件,我想获取输入此网址的用户的IP以加载1.jpg

我在我的网址中添加了这一行:  url(r'^media/(?P<path>.*)$', 'project.views.serve','document_root': settings.MEDIA_ROOT,}),我已经设置了MEDIA_ROOT。然后在project.views.serve我调用了django.views.static.serve,我将其结果作为HttpResponse返回。我在我的project.views.serve中有一个请求参数,我这样做是为了从用户那里得到用户的IP:

x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
    ip = x_forwarded_for.split(',')[-1].strip()
else:
    ip = request.META.get('REMOTE_ADDR')
print ip

答案 4 :(得分:0)

你的方式很好但不适合高流量。在这种情况下,您可以使用适用于Apache的XSendFile