我有一个django项目正在localhost:8000
上运行(例如)。
我在此地址localhost:8000/static/test.jpg
中有一张图片。用户可以通过转到它的URL来打开这个图像,而不是打开包含页面。
我想知道这个图像是否在用户的浏览器中加载(通过加载包含页面或只是输入图像的URL),我想得到该请求的请求对象。
我的观点中是否可以为该特定图像设置方法?我通过互联网搜索,但没有发现任何有用的东西。任何想法或解决方案?
答案 0 :(得分:0)
您是在谈论禁止热链接吗?使用在Django服务器前运行的Web服务器可以更轻松,更有效地完成这项工作。
对于Apache的一些示例,请查看https://wiki.apache.org/httpd/DisableImageHotLinking
答案 1 :(得分:0)
这只能通过自定义视图提供图片来实现。例如,您应该编写自己的视图来返回静态资源,并且不会使用标准的django静态处理程序
答案 2 :(得分:0)
首先,请注意,Django首先不应该在生产环境中提供静态文件。来自contrib/staticfiles/views.py
:
用于提供静态文件的视图和函数。这些仅用于期间 开发,不应该在生产环境中使用。
如果你想使用它,那么你可以写一个custom middleware挂钩到process_view
或process_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
库