Django Медиа-файлы (изображения) Безопасность - PullRequest
0 голосов
/ 11 июля 2020

Я работаю над обработкой изображений в Django. Я использую обычный метод хранения модели изображения.

Итак, моя модель выглядит примерно так:

class PictureModel(models.Model):
    def user_directory_path(instance, filename):
        return 'images/{0}/{1}'.format(instance.user.username, filename)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    image = models.ImageField(upload_to=user_directory_path)

view.py чем-то похож на

@login_required(login_url='/accounts/login/')
def myMethod(request):
    user = request.user
    myImage = PictureModel.objects.get(user=request.user)
    return render(request, 'main/myPage.html', {'myImage': myImage})

I иметь настройку media root как,

MEDIA_ROOT =  os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

Настройка url.py выглядит следующим образом:

url(r'^static/(?P<path>.*)$', django.views.static.serve, {'document_root': settings.STATIC_ROOT, 'show_indexes': settings.DEBUG})

Теперь в обычном потоке загрузка и извлечение изображений работают должным образом . Но проблема связана с проверкой / аутентификацией пользователя при получении медиафайла.

Предположим, я получаю изображение по URL-адресу,

media/images/user_1/mypic.jpg

Но вся медиа-папка открывается без любые проверки, и я могу получить доступ,

media/images/user_2/mypic.jpg

также через браузер. Я искал это по net и обнаружил, что доступны некоторые случайные сторонние библиотеки, но они не так стандартны / популярны. Может ли кто-нибудь предложить лучшие практики и библиотеки, чтобы справиться с ситуацией.

1 Ответ

0 голосов
/ 11 июля 2020

Добавьте это в свой шаблон, это решит проблему

<img style="height:200px; width:200px; border-radius:50%; margin:auto" src="{{ appname.function_name.image.url }}" alt="Photo">
...