1

在过去,我设法通过以下方式保护我在其他项目中的图像:

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/视图不是一个好主意,也许对所提出的问题有更好的解决方案。

4

0 回答 0