diff --git a/db.sql b/db.sql new file mode 100644 index 0000000..e69de29 diff --git a/smugfolioapi/migrations/0002_rename_smug_user_id_images_smug_user_images_picture.py b/smugfolioapi/migrations/0002_rename_smug_user_id_images_smug_user_images_picture.py new file mode 100644 index 0000000..52298e7 --- /dev/null +++ b/smugfolioapi/migrations/0002_rename_smug_user_id_images_smug_user_images_picture.py @@ -0,0 +1,23 @@ +# Generated by Django 4.0.3 on 2022-03-17 18:43 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('smugfolioapi', '0001_initial'), + ] + + operations = [ + migrations.RenameField( + model_name='images', + old_name='smug_user_id', + new_name='smug_user', + ), + migrations.AddField( + model_name='images', + name='picture', + field=models.ImageField(null=True, upload_to='smugimages'), + ), + ] diff --git a/smugfolioapi/models/images.py b/smugfolioapi/models/images.py index 6fe28a9..1a5ff0f 100644 --- a/smugfolioapi/models/images.py +++ b/smugfolioapi/models/images.py @@ -1,15 +1,20 @@ from django.db import models class Images(models.Model): - file_name = models.CharField(max_length=1024) - file_path = models.CharField(max_length=1024) album_id = models.IntegerField(default=0) smug_user = models.ForeignKey("Smug_Users", on_delete=models.CASCADE) upload_date = models.DateTimeField(auto_now_add=True) + picture = models.ImageField( + upload_to='smugimages', height_field=None, + width_field=None, max_length=None, null=True + ) - @property - def imagecount(self): - return self.__imagecount + # @property + # def imagecount(self): + # return self.__imagecount + # @imagecount.setter + # def imagecount(self, value): + # self.__imagecount = value # I believe that auto_now_add is the correct syntax. If I'm understanding this correctly, it only creates a timestamp when the object is first created. # https://www.geeksforgeeks.org/datetimefield-django-models/ \ No newline at end of file diff --git a/smugfolioapi/views/image_tags.py b/smugfolioapi/views/image_tags.py index 4193189..ce42c53 100644 --- a/smugfolioapi/views/image_tags.py +++ b/smugfolioapi/views/image_tags.py @@ -4,6 +4,7 @@ from rest_framework.response import Response from rest_framework import serializers, status from django.contrib.auth.models import User from smugfolioapi.models import Image_Tags +from rest_framework.decorators import action class ImageTagsView(ViewSet): """SmugFolio image_Tags s view""" diff --git a/smugfolioapi/views/images.py b/smugfolioapi/views/images.py index 4935ccd..930db10 100644 --- a/smugfolioapi/views/images.py +++ b/smugfolioapi/views/images.py @@ -4,6 +4,9 @@ from rest_framework.response import Response from rest_framework import serializers, status from smugfolioapi.models import Images, Smug_Users from PIL import Image +import uuid +import base64 +from django.core.files.base import ContentFile class ImageView(ViewSet): """SmugFolio images s view""" @@ -35,7 +38,7 @@ class ImageView(ViewSet): images_ = request.query_params.get('type', None) images = Images.objects.all() if images_ is not None: - images = images.filter(images_type_id=images_) + images = images.filter(images_type_id=images_) serializer = ImagesSerializer(images, many=True) return Response(serializer.data) @@ -46,12 +49,16 @@ class ImageView(ViewSet): Response -- JSON serialized images instance """ # object must be retrived when using a foreign key + format, imgstr = request.data["picture"].split(';base64,') + ext = format.split('/')[-1] + data = ContentFile(base64.b64decode(imgstr), name=f'{request.data["picture"]}-{uuid.uuid4()}.{ext}') smug_user = Smug_Users.objects.get(user=request.auth.user) images = Images.objects.create( file_name=request.data["file_name"], file_path=request.data["file_path"], album_id=request.data["album_id"], - smug_user=smug_user, + picture= data, + smug_user= smug_user, upload_date = request.data["upload_date"] ) serializer = ImagesSerializer(images) @@ -93,7 +100,7 @@ class ImagesSerializer(serializers.ModelSerializer): """ class Meta: model = Images - fields = ('id', 'file_name', 'file_path', 'album_id', 'smug_user_id', 'upload_date') + fields = ('id', 'file_name', 'file_path', 'album_id', 'smug_user_id', 'upload_date', 'picture', 'imagecount') depth = 2 diff --git a/smugfolioserver/__init__.py b/smugfolioserver/__init__.py index e69de29..3f0901b 100644 --- a/smugfolioserver/__init__.py +++ b/smugfolioserver/__init__.py @@ -0,0 +1 @@ +from .settings import MEDIA_URL, MEDIA_ROOT \ No newline at end of file diff --git a/smugfolioserver/db.sql b/smugfolioserver/db.sql index 0e49153..6517769 100644 --- a/smugfolioserver/db.sql +++ b/smugfolioserver/db.sql @@ -1,2 +1,5 @@ -ALTER TABLE smugfolioapi_images -RENAME 'smug_user_id_id' TO 'smug_user_id'; \ No newline at end of file +DELETE FROM smugfolioapi_images +WHERE id = 1; + +SELECT * +FROM smugfolioapi_images; \ No newline at end of file diff --git a/smugfolioserver/settings.py b/smugfolioserver/settings.py index 453d1b6..db8d1b8 100644 --- a/smugfolioserver/settings.py +++ b/smugfolioserver/settings.py @@ -148,4 +148,7 @@ STATIC_URL = 'static/' DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' -SECRET_KEY = os.environ.get('MY_SECRET_KEY') \ No newline at end of file +SECRET_KEY = os.environ.get('MY_SECRET_KEY') + +MEDIA_ROOT = 'media' +MEDIA_URL = '/media/' \ No newline at end of file diff --git a/smugfolioserver/urls.py b/smugfolioserver/urls.py index e9bb197..2675cba 100644 --- a/smugfolioserver/urls.py +++ b/smugfolioserver/urls.py @@ -20,8 +20,10 @@ from smugfolioapi.views import register_user, login_user, ImageView, SmugUserVie from rest_framework import routers from django.contrib import admin from django.urls import path +from django.conf.urls.static import static from smugfolioapi.views.image_tags import ImageTagsView from smugfolioapi.views.images import ImageView +from smugfolioserver import settings, MEDIA_ROOT, MEDIA_URL router = routers.DefaultRouter(trailing_slash=False) router.register(r'images', ImageView, 'image') @@ -34,4 +36,4 @@ urlpatterns = [ path('login', login_user), path('api-auth', include('rest_framework.urls', namespace='rest_framework')), path('', include(router.urls)), -] +] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)