在过去,我设法通过以下方式保护我在其他项目中的图像:
urls.py
urlpatterns = [
...
path('media/<str:filename>/', views.media, name="media"),
]
settings.py
#MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
views.py
@login_required
def media(request, filename):
import os
from mimetypes import MimeTypes
content_type, encoding = MimeTypes().guess_type(
os.path.basename(filename)
)
if content_type is None or len(content_type) == 0:
print(f'No content-type found for file: {filename}')
content_type = 'text/plain'
try:
url = os.path.join(
settings.MEDIA_ROOT, str(filename)
)
with open(url.encode('utf-8'), 'rb') as f:
resp = HttpResponse(f.read(), content_type=content_type)
# resp['Content-Disposition'] = f'attachment; filename="{filename}"'
resp['X-Robots-Tag'] = 'noindex, nofollow'
return resp
except IOError as ex:
data = {'ERROR': str(ex)}
print(data)
return JsonResponse(data)
有了这个,如果有人试图通过 url 查看例如图像www.example.com/media/image.png
,除非他们登录,否则用户将看不到任何东西。
我需要使用django-wiki
系统https://github.com/django-wiki/django-wiki ,我通过pip install wiki
.
现在我的项目与 wiki 系统一起工作。
Wiki系统安装在这个路径:
/Users/{my_username}/.virtualenvs/{my_virtualenv_name}/lib/python3.9/site-packages/wiki/
有没有办法以与 wiki 系统相同的方式保护图像?
我认为修改.../site-packages/wiki/
视图不是一个好主意,也许对所提出的问题有更好的解决方案。