Как скрыть путь к текущему местоположению загруженного изображения в django?

Я сделал функцию в Django, где каждый пользователь может изменить логотип своей платформы. Выбранное пользователем изображение будет сохранено в static/{user.customer.public_id}/platformLogo/image.jpg. Когда я сохраняю изменения, я вижу путь к загруженному изображению, который также содержит уникальный публичный ID, который я не хочу, чтобы пользователь видел в целях безопасности. Может ли кто-нибудь помочь мне скрыть этот путь к изображению в Django для пользователя? Прикрепляю часть моего кода ниже.

Здесь мы видим путь изображения, который имеет уникальный ID в пути, который нам нужно скрыть

Здесь находится каталог пути загруженного изображения

Вот мой models.py

from sre_constants import CATEGORY
from unicodedata import category
from attr import fields
from django.db import models
from datetime import date
from django.contrib.auth.models import User
import uuid

def upload_path(instance, filename):
    filename = str(date.today())
    name = instance.user.customer.public_id.hex
    return f'{name}/platformLogo/{filename}.jpg'


class Customer(models.Model):
    user = models.OneToOneField(User, null=True, blank =True, on_delete=models.CASCADE)
    public_id = models.UUIDField(primary_key=True, default = uuid.uuid4, editable=False)
    date_created = models.DateTimeField(auto_now_add=True, null=True)
    name = models.CharField(max_length=200, null=True)
    otp_code = models.CharField(max_length=6, null=True)
    first_name = models.CharField(max_length=200, null=True)
    last_name = models.CharField(max_length=200, null=True)
    email = models.CharField(max_length=200, unique=True)
    phone = models.CharField(max_length=200, null=True)
    profile_pic= models.ImageField(upload_to=upload_path, default='logo.png', null=True, blank=False,)

def __str__(self):
    return self.name

Вот мой views.py

@login_required(login_url='login')
def accountSetting(request):
    customer = request.user.customer
    form = CustomerForm(instance= customer)

    if request.method == 'POST':
        form = CustomerForm(data=request.POST, files=request.FILES, instance=customer)
        if form.is_valid():
            form.save()

    context = {'form': form}
    if request.user.is_anonymous:
        return redirect("/") 
    return render(request, 'account-settings.html', context)

Вот мой forms.py

from django.forms import ModelForm
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from .models import Customer
from django import forms


class CustomerForm(ModelForm):
    class Meta:
        model = Customer
        fields  = '__all__'
        exclude = ['user', 'email','name','otp_code']


class CreateUserForm(UserCreationForm):
    class Meta:
        model = User
        fields  = ['username','first_name','last_name', 'email', 'password1', 'password2']

Вот settings.py

STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

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

Поскольку вы уже сделали public_id UUID, почему бы не хэшировать логотип и название изображения?

В окружении Django я использовал xsendfile с Apache или nginx. В итоге вы помещаете изображения в папку, которая доступна Apache и обслуживается apache, но может обслуживаться только после запроса к бэкенду Django. Это предотвращает попадание всех логотипов в поле зрения посторонних глаз.

Вернуться на верх