Как создать модель django со статическим файлом изображения

enter code here

class EncryptedMessage(models.Model):
    image = models.ImageField(upload_to="images", blank=True)

    def __str__(self):
        return 'image: {}'.format(self.image)

Это моя модель django, мне нужно создать объект со статическим файлом изображения.

class EncryptedMessage(models.Model): image = models.ImageField(upload_to="images", blank=True)

def __str__(self):
    return 'image: {}'.format(self.image)

Сначала зайдите в ваш settings.py и сделайте что-то вроде этого:

# Goes in the setting.py 
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_ROOT = os.path.join(BASE_DIR, 'static/media')

Затем вы связываете пути media и static в вашем основном urls.py для загрузки статических файлов и в определенное время сохраняете файлы в директории static и media.

#Your main urls.py 
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
]
if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Сначала вам нужно будет создать представление для обработки получения изображений из бэкенда.

from .models import EncryptedMessag

def my_view_for_image(request):
    all_images = EncryptedMessag.objects.all()
    ctx = {'all_images':all_images}
    return render(request, 'Put your html here', ctx)

В своем шаблоне вы делаете примерно следующее:

# our template where the image will be shown.
# here we are looping to get all the objects in all_images
{% for photo in all_images %} 
<div>
<img src="{{ photo.image.url }}" alt="">
    {{ photo.name }}
</div>
{% endfor %}

@api_view(['POST'])
def encryptMessage(request):
    serializer = MessageSerializer(data=request.data)

    if serializer.is_valid():
        serializer.save()

        imageFile = open(str(settings.BASE_DIR) +str(serializer.data['image1']), 'ab')
        if serializer.data['image2'] != None:
            imageFile.write(serializer.data['image2'].encode())
        elif serializer.data['textMsg'] != None:
            imageFile.write(serializer.data['textMsg'].encode())
        else:
            return Response("Invalid message")

        encryptedMessage = EncryptedMessage.objects.create()

        encryptedMessage.image = imageFile

        encryptedMessageSerializer = EncryptedMessageSerializer(data = encryptedMessage, many=False)
  
        if encryptedMessageSerializer.is_valid():
            print(encryptedMessageSerializer.data)
            encryptedMessageSerializer.save()


        return Response("")

    return Response("Invalid")

@api_view(['POST'])
def encryptMessage(request):
    serializer = MessageSerializer(data=request.data)

    if serializer.is_valid():
        serializer.save()

        imageFile = open(str(settings.BASE_DIR) +str(serializer.data['image1']), 'ab')
        if serializer.data['image2'] != None:
            imageFile.write(serializer.data['image2'].encode())
        elif serializer.data['textMsg'] != None:
            imageFile.write(serializer.data['textMsg'].encode())
        else:
            return Response("Invalid message")

        encryptedMessage = EncryptedMessage.objects.create()

        encryptedMessage.image = imageFile

        encryptedMessageSerializer = EncryptedMessageSerializer(data = encryptedMessage, many=False)
  
        if encryptedMessageSerializer.is_valid():
            print(encryptedMessageSerializer.data)
            encryptedMessageSerializer.save()


        return Response("")

    return Response("Invalid")

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