Как скрыть путь к текущему местоположению загруженного изображения в 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. Это предотвращает попадание всех логотипов в поле зрения посторонних глаз.