최지우

add Video AutoDelete, Delete API

1 -{
2 - "aws" : {
3 - "access_key_id" : "AKIA5ZZ6DPFONI4VDIPH",
4 - "secret_access_key" : "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",
5 - "s3_bucket_name" : "khuproject2020",
6 - "s3_access_url" : "https://khuproject2020.s3.ap-northeast-2.amazonaws.com/"
7 - }
8 -}
...\ No newline at end of file ...\ No newline at end of file
...@@ -4,4 +4,4 @@ __pycache__ ...@@ -4,4 +4,4 @@ __pycache__
4 db.sqlite3 4 db.sqlite3
5 /static 5 /static
6 .DS_Store 6 .DS_Store
7 -.aws_key.json 7 +*.json
......
1 from django.contrib import admin 1 from django.contrib import admin
2 - 2 +from .models import Video, Phone
3 # Register your models here. 3 # Register your models here.
4 +admin.site.register(Video)
5 +admin.site.register(Phone)
...\ No newline at end of file ...\ No newline at end of file
......
1 from django.db import models 1 from django.db import models
2 +from django.conf import settings
2 from django.utils import timezone 3 from django.utils import timezone
3 4
4 # Create your models here. 5 # Create your models here.
...@@ -6,7 +7,8 @@ class Phone(models.Model) : ...@@ -6,7 +7,8 @@ class Phone(models.Model) :
6 username = models.CharField(max_length = 255) 7 username = models.CharField(max_length = 255)
7 and_id = models.CharField(max_length = 255, primary_key = True) 8 and_id = models.CharField(max_length = 255, primary_key = True)
8 9
10 +
9 class Video(models.Model) : 11 class Video(models.Model) :
10 - vidname = models.CharField(max_length = 255) 12 + vidname = models.CharField(max_length = 255, primary_key = True)
11 created = models.DateTimeField(default = timezone.now) 13 created = models.DateTimeField(default = timezone.now)
12 s3_link = models.CharField(max_length = 255) 14 s3_link = models.CharField(max_length = 255)
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -15,12 +15,13 @@ from rest_framework.response import Response ...@@ -15,12 +15,13 @@ from rest_framework.response import Response
15 from boto3.session import Session 15 from boto3.session import Session
16 from src.settings import AWS_REGION 16 from src.settings import AWS_REGION
17 from src.settings import S3_ACCESS_URL 17 from src.settings import S3_ACCESS_URL
18 +from src.settings import S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_STORAGE_BUCKET_NAME
18 19
19 from datetime import datetime, timedelta 20 from datetime import datetime, timedelta
20 # Create your views here. 21 # Create your views here.
21 22
22 class VideoDownload(APIView) : 23 class VideoDownload(APIView) :
23 - def get(self, request, format=None) : 24 + def get(self, request, format = None) :
24 try : 25 try :
25 request_id = request.GET.get('vidname') 26 request_id = request.GET.get('vidname')
26 if request_id == 'None' : 27 if request_id == 'None' :
...@@ -43,4 +44,32 @@ class VideoDownload(APIView) : ...@@ -43,4 +44,32 @@ class VideoDownload(APIView) :
43 'date' : datetime.now() 44 'date' : datetime.now()
44 }, status = status.HTTP_404_NOT_FOUND) 45 }, status = status.HTTP_404_NOT_FOUND)
45 46
47 +class VideoAutoDelete(APIView) :
48 + def post(self, request, format = None) :
49 + checkdate = datetime.now() + timedelta(days = -7)
50 + quaryset = Video.objects.filter(created__lt = checkdate)
51 + session = boto3.session.Session(aws_access_key_id = S3_ACCESS_KEY_ID, aws_secret_access_key = S3_SECRET_ACCESS_KEY, region_name = AWS_REGION)
52 + s3 = session.client('s3')
53 + for delvid in quaryset :
54 + s3.delete_object(Bucket = S3_STORAGE_BUCKET_NAME, Key = str(delvid.vidname))
55 + quaryset.delete()
56 + return Response(status = status.HTTP_200_OK)
46 57
58 +class VideoDelete(APIView) :
59 + def post(self, request, format = None) :
60 + try :
61 + request_id = request.GET.get('vidname')
62 + if request_id == 'None' :
63 + raise FieldDoesNotExist
64 + session = boto3.session.Session(aws_access_key_id = S3_ACCESS_KEY_ID, aws_secret_access_key = S3_SECRET_ACCESS_KEY, region_name = AWS_REGION)
65 + s3 = session.client('s3')
66 +
67 + target = Video.objects.get(vidname = request_id)
68 + s3.delete_object(Bucket = S3_STORAGE_BUCKET_NAME, Key = str(target.vidname))
69 + target.delete()
70 + return Response(status = status.HTTP_200_OK)
71 + except FieldDoesNotExist as error :
72 + return Response({
73 + 'error' : "FieldDoesNotExist ",
74 + 'date' : datetime.now()
75 + }, status = status.HTTP_400_BAD_REQUEST)
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -21,4 +21,6 @@ from api import views ...@@ -21,4 +21,6 @@ from api import views
21 urlpatterns = [ 21 urlpatterns = [
22 path('admin/', admin.site.urls), 22 path('admin/', admin.site.urls),
23 path('api/videoDownload/', views.VideoDownload.as_view()), 23 path('api/videoDownload/', views.VideoDownload.as_view()),
24 + path('api/videoAutoDelete/', views.VideoAutoDelete.as_view()),
25 + path('api/videoDelete/', views.VideoDelete.as_view()),
24 ] 26 ]
......