Archived
Merge pull request #12 from JMR-dev/jr-main-page-views
Completed main page views
This commit was merged in pull request #12.
This commit is contained in:
@@ -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'),
|
||||
),
|
||||
]
|
||||
@@ -1,11 +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_id = models.ForeignKey("Smug_Users", on_delete=models.CASCADE)
|
||||
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
|
||||
# @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/
|
||||
@@ -1 +1,4 @@
|
||||
from .auth import login_user, register_user
|
||||
from .auth import login_user, register_user
|
||||
from .images import ImageView
|
||||
from .smug_users import SmugUserView
|
||||
from .image_tags import Image_Tags
|
||||
@@ -0,0 +1,93 @@
|
||||
from django.http import HttpResponseServerError
|
||||
from rest_framework.viewsets import ViewSet
|
||||
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"""
|
||||
|
||||
def retrieve(self, request, pk):
|
||||
"""Handle GET requests for single image_Tags
|
||||
|
||||
|
||||
Returns:
|
||||
Response -- JSON serialized image_Tags
|
||||
"""
|
||||
|
||||
|
||||
|
||||
try:
|
||||
image_Tags = Image_Tags.objects.get(pk=pk)
|
||||
serializer = Image_TagsSerializer(image_Tags)
|
||||
return Response(serializer.data)
|
||||
except Image_Tags.DoesNotExist as ex:
|
||||
return Response({'message': ex.args[0]}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
|
||||
def list(self, request):
|
||||
"""Handle GET requests to get all image_Tags
|
||||
|
||||
Returns:
|
||||
Response -- JSON serialized list of image_Tags
|
||||
"""
|
||||
image_Tags_ = request.query_params.get('type', None)
|
||||
image_Tags = Image_Tags.objects.all()
|
||||
if image_Tags_ is not None:
|
||||
image_Tags = image_Tags.filter(image_Tags_type_id=image_Tags_)
|
||||
serializer = Image_TagsSerializer(image_Tags, many=True)
|
||||
return Response(serializer.data)
|
||||
|
||||
def create(self, request):
|
||||
"""Handle POST operations
|
||||
|
||||
Returns
|
||||
Response -- JSON serialized image_Tags instance
|
||||
"""
|
||||
|
||||
image_Tags = Image_Tags.objects.create(
|
||||
image_tag_name = request.data["image_tag_name"]
|
||||
|
||||
)
|
||||
serializer = Image_TagsSerializer(image_Tags)
|
||||
return Response(serializer.data, status=201)
|
||||
|
||||
def update(self, request, pk):
|
||||
"""Handle PUT requests for a image_Tags
|
||||
|
||||
Returns:
|
||||
Response -- Empty body with 204 status code
|
||||
"""
|
||||
|
||||
image_Tags = Image_Tags.objects.get(pk=pk)
|
||||
image_Tags.image_tag_name = request.data["image_tag_name"]
|
||||
image_Tags.save()
|
||||
|
||||
return Response(None, status=status.HTTP_204_NO_CONTENT)
|
||||
def destroy(self, request, pk):
|
||||
"""Handle DELETE requests for a image_Tags
|
||||
|
||||
Args:
|
||||
request (object): DELETE request object
|
||||
pk (num): Accepts the argument of the primary key of an image_Tags
|
||||
|
||||
Returns:
|
||||
Status: If the method completes successfully, return a HTTP response 204
|
||||
"""
|
||||
image_Tags = Image_Tags.objects.get(pk=pk)
|
||||
image_Tags.delete()
|
||||
return Response(None, status=status.HTTP_204_NO_CONTENT)
|
||||
|
||||
|
||||
class Image_TagsSerializer(serializers.ModelSerializer):
|
||||
"""JSON serializer for image_Tags s
|
||||
"""
|
||||
class Meta:
|
||||
model = Image_Tags
|
||||
fields = ('id', 'image_tag_name')
|
||||
depth = 2
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
from django.http import HttpResponseServerError
|
||||
from rest_framework.viewsets import ViewSet
|
||||
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"""
|
||||
|
||||
def retrieve(self, request, pk):
|
||||
"""Handle GET requests for single images
|
||||
|
||||
|
||||
Returns:
|
||||
Response -- JSON serialized images
|
||||
"""
|
||||
|
||||
|
||||
|
||||
try:
|
||||
images = Images.objects.get(pk=pk)
|
||||
serializer = ImagesSerializer(images)
|
||||
return Response(serializer.data)
|
||||
except Images.DoesNotExist as ex:
|
||||
return Response({'message': ex.args[0]}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
|
||||
def list(self, request):
|
||||
"""Handle GET requests to get all images
|
||||
|
||||
Returns:
|
||||
Response -- JSON serialized list of images
|
||||
"""
|
||||
images_ = request.query_params.get('type', None)
|
||||
images = Images.objects.all()
|
||||
if images_ is not None:
|
||||
images = images.filter(images_type_id=images_)
|
||||
serializer = ImagesSerializer(images, many=True)
|
||||
return Response(serializer.data)
|
||||
|
||||
def create(self, request):
|
||||
"""Handle POST operations
|
||||
|
||||
Returns
|
||||
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"],
|
||||
picture= data,
|
||||
smug_user= smug_user,
|
||||
upload_date = request.data["upload_date"]
|
||||
)
|
||||
serializer = ImagesSerializer(images)
|
||||
return Response(serializer.data, status=201)
|
||||
|
||||
def update(self, request, pk):
|
||||
"""Handle PUT requests for a images
|
||||
|
||||
Returns:
|
||||
Response -- Empty body with 204 status code
|
||||
"""
|
||||
# Refactor keys to match ERD
|
||||
images = Images.objects.get(pk=pk)
|
||||
images.file_name = request.data["file_name"]
|
||||
images.file_path = request.data["file_path"]
|
||||
images.album_id = request.data["album_id"]
|
||||
images.smug_user_id = request.data["smug_user_id"]
|
||||
images.upload_date = request.data["upload_date"]
|
||||
images.save()
|
||||
|
||||
return Response(None, status=status.HTTP_204_NO_CONTENT)
|
||||
def destroy(self, request, pk):
|
||||
"""Handle DELETE requests for a images
|
||||
|
||||
Args:
|
||||
request (object): DELETE request object
|
||||
pk (num): Accepts the argument of the primary key of a images
|
||||
|
||||
Returns:
|
||||
Status: If the method completes successfully, return a HTTP response 204
|
||||
"""
|
||||
images = Images.objects.get(pk=pk)
|
||||
images.delete()
|
||||
return Response(None, status=status.HTTP_204_NO_CONTENT)
|
||||
|
||||
|
||||
class ImagesSerializer(serializers.ModelSerializer):
|
||||
"""JSON serializer for images s
|
||||
"""
|
||||
class Meta:
|
||||
model = Images
|
||||
fields = ('id', 'file_name', 'file_path', 'album_id', 'smug_user_id', 'upload_date', 'picture', 'imagecount')
|
||||
depth = 2
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
from django.http import HttpResponseServerError
|
||||
from rest_framework.viewsets import ViewSet
|
||||
from rest_framework.response import Response
|
||||
from rest_framework import serializers, status
|
||||
from django.contrib.auth.models import User
|
||||
from smugfolioapi.models import Smug_Users
|
||||
|
||||
class SmugUserView(ViewSet):
|
||||
"""SmugFolio smug_users s view"""
|
||||
|
||||
def retrieve(self, request, pk):
|
||||
"""Handle GET requests for single smug_users
|
||||
|
||||
|
||||
Returns:
|
||||
Response -- JSON serialized smug_users
|
||||
"""
|
||||
|
||||
|
||||
|
||||
try:
|
||||
smug_users = Smug_Users.objects.get(pk=pk)
|
||||
serializer = Smug_UsersSerializer(smug_users)
|
||||
return Response(serializer.data)
|
||||
except Smug_Users.DoesNotExist as ex:
|
||||
return Response({'message': ex.args[0]}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
|
||||
def list(self, request):
|
||||
"""Handle GET requests to get all smug_users
|
||||
|
||||
Returns:
|
||||
Response -- JSON serialized list of smug_users
|
||||
"""
|
||||
smug_users_ = request.query_params.get('type', None)
|
||||
smug_users = Smug_Users.objects.all()
|
||||
if smug_users_ is not None:
|
||||
smug_users = smug_users.filter(smug_users_type_id=smug_users_)
|
||||
serializer = Smug_UsersSerializer(smug_users, many=True)
|
||||
return Response(serializer.data)
|
||||
|
||||
def update(self, request, pk):
|
||||
"""Handle PUT requests for a smug_users
|
||||
|
||||
Returns:
|
||||
Response -- Empty body with 204 status code
|
||||
"""
|
||||
|
||||
smug_users = smug_users.objects.get(pk=pk)
|
||||
smug_users.user = request.data["user"]
|
||||
smug_users.business_name = request.data["business_name"]
|
||||
smug_users.business_owner = request.data["business_owner"]
|
||||
|
||||
|
||||
return Response(None, status=status.HTTP_204_NO_CONTENT)
|
||||
def destroy(self, request, pk):
|
||||
"""Handle DELETE requests for a smug_users
|
||||
|
||||
Args:
|
||||
request (object): DELETE request object
|
||||
pk (num): Accepts the argument of the primary key of a smug_users
|
||||
|
||||
Returns:
|
||||
Status: If the method completes successfully, return a HTTP response 204
|
||||
"""
|
||||
smug_users = smug_users.objects.get(pk=pk)
|
||||
smug_users.delete()
|
||||
return Response(None, status=status.HTTP_204_NO_CONTENT)
|
||||
|
||||
|
||||
class Smug_UsersSerializer(serializers.ModelSerializer):
|
||||
"""JSON serializer for smug_users s
|
||||
"""
|
||||
class Meta:
|
||||
model = Smug_Users
|
||||
fields = ('id', 'business_name', 'business_owner')
|
||||
depth = 2
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
from .settings import MEDIA_URL, MEDIA_ROOT
|
||||
@@ -1,2 +1,5 @@
|
||||
DELETE FROM 'auth_user'
|
||||
WHERE id=2;
|
||||
DELETE FROM smugfolioapi_images
|
||||
WHERE id = 1;
|
||||
|
||||
SELECT *
|
||||
FROM smugfolioapi_images;
|
||||
@@ -148,4 +148,7 @@ STATIC_URL = 'static/'
|
||||
|
||||
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
||||
|
||||
SECRET_KEY = os.environ.get('MY_SECRET_KEY')
|
||||
SECRET_KEY = os.environ.get('MY_SECRET_KEY')
|
||||
|
||||
MEDIA_ROOT = 'media'
|
||||
MEDIA_URL = '/media/'
|
||||
@@ -16,12 +16,19 @@ Including another URLconf
|
||||
from django.contrib import admin
|
||||
from django.conf.urls import include
|
||||
from django.urls import path
|
||||
from smugfolioapi.views import register_user, login_user
|
||||
from smugfolioapi.views import register_user, login_user, ImageView, SmugUserView
|
||||
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')
|
||||
router.register(r'smug_users',SmugUserView,'smug_user')
|
||||
router.register(r'image_tags', ImageTagsView,'image_tag')
|
||||
|
||||
urlpatterns = [
|
||||
path('admin/', admin.site.urls),
|
||||
@@ -29,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)
|
||||
|
||||
Reference in New Issue
Block a user