최지우

add Video AutoDelete, Delete API

{
"aws" : {
"access_key_id" : "AKIA5ZZ6DPFONI4VDIPH",
"secret_access_key" : "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",
"s3_bucket_name" : "khuproject2020",
"s3_access_url" : "https://khuproject2020.s3.ap-northeast-2.amazonaws.com/"
}
}
\ No newline at end of file
......@@ -4,4 +4,4 @@ __pycache__
db.sqlite3
/static
.DS_Store
.aws_key.json
*.json
......
from django.contrib import admin
from .models import Video, Phone
# Register your models here.
admin.site.register(Video)
admin.site.register(Phone)
\ No newline at end of file
......
from django.db import models
from django.conf import settings
from django.utils import timezone
# Create your models here.
......@@ -6,7 +7,8 @@ class Phone(models.Model) :
username = models.CharField(max_length = 255)
and_id = models.CharField(max_length = 255, primary_key = True)
class Video(models.Model) :
vidname = models.CharField(max_length = 255)
vidname = models.CharField(max_length = 255, primary_key = True)
created = models.DateTimeField(default = timezone.now)
s3_link = models.CharField(max_length = 255)
\ No newline at end of file
......
......@@ -15,12 +15,13 @@ from rest_framework.response import Response
from boto3.session import Session
from src.settings import AWS_REGION
from src.settings import S3_ACCESS_URL
from src.settings import S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_STORAGE_BUCKET_NAME
from datetime import datetime, timedelta
# Create your views here.
class VideoDownload(APIView) :
def get(self, request, format=None) :
def get(self, request, format = None) :
try :
request_id = request.GET.get('vidname')
if request_id == 'None' :
......@@ -43,4 +44,32 @@ class VideoDownload(APIView) :
'date' : datetime.now()
}, status = status.HTTP_404_NOT_FOUND)
class VideoAutoDelete(APIView) :
def post(self, request, format = None) :
checkdate = datetime.now() + timedelta(days = -7)
quaryset = Video.objects.filter(created__lt = checkdate)
session = boto3.session.Session(aws_access_key_id = S3_ACCESS_KEY_ID, aws_secret_access_key = S3_SECRET_ACCESS_KEY, region_name = AWS_REGION)
s3 = session.client('s3')
for delvid in quaryset :
s3.delete_object(Bucket = S3_STORAGE_BUCKET_NAME, Key = str(delvid.vidname))
quaryset.delete()
return Response(status = status.HTTP_200_OK)
class VideoDelete(APIView) :
def post(self, request, format = None) :
try :
request_id = request.GET.get('vidname')
if request_id == 'None' :
raise FieldDoesNotExist
session = boto3.session.Session(aws_access_key_id = S3_ACCESS_KEY_ID, aws_secret_access_key = S3_SECRET_ACCESS_KEY, region_name = AWS_REGION)
s3 = session.client('s3')
target = Video.objects.get(vidname = request_id)
s3.delete_object(Bucket = S3_STORAGE_BUCKET_NAME, Key = str(target.vidname))
target.delete()
return Response(status = status.HTTP_200_OK)
except FieldDoesNotExist as error :
return Response({
'error' : "FieldDoesNotExist ",
'date' : datetime.now()
}, status = status.HTTP_400_BAD_REQUEST)
\ No newline at end of file
......
......@@ -21,4 +21,6 @@ from api import views
urlpatterns = [
path('admin/', admin.site.urls),
path('api/videoDownload/', views.VideoDownload.as_view()),
path('api/videoAutoDelete/', views.VideoAutoDelete.as_view()),
path('api/videoDelete/', views.VideoDelete.as_view()),
]
......