Home > Blockchain >  How to create a django model with static image file
How to create a django model with static image file

Time:01-31

This is my django model, I need to create an object with static image file.

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

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

CodePudding user response:

First go into your settings.py and do something like so:

# 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')

Then you link your media and static path in your main urls.py to load static files and at the sometime save your files in the static and media directory.

#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)

First you will need to create a view to handle the the getting of your images from the backend.

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)

In your template you do something like this:

# 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 %}

Well here is a way to uploading images through the rest api.

@api_view(['POST'])
 def uploadImage(request):
    data = request.data

    obj_id = data['obj_id']
    obj= EncryptedMessag.objects.get(id=obj_id)

    obj.image = request.FILES.get('image')
    obj.save()

    return Response('Image was uploaded')

When you upload your image file from Admin it will be accessible with the following URL pattern HTTP://localhost:8000/images/ImageFileName.png

path('upload/', views.uploadImage, name="image-upload"),

CodePudding user response:

@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")

  •  Tags:  
  • Related