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