Toggle navigation
Toggle navigation
This project
Loading...
Sign in
cse437_e
/
smartdoorlock-backend
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
최지우
2020-11-02 17:28:40 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
9241eb1a87920477bc60d899a6251eb7962d023f
9241eb1a
1 parent
a1aa7c78
add settings api
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
101 additions
and
36 deletions
api/admin.py
api/models.py
api/serializers.py
api/views.py
src/urls.py
api/admin.py
View file @
9241eb1
from
django.contrib
import
admin
from
.models
import
Video
,
Device
,
History
,
Lock
from
.models
import
Video
,
Device
,
History
,
Lock
,
Record
,
Door
# Register your models here.
admin
.
site
.
register
(
Door
)
admin
.
site
.
register
(
Video
)
admin
.
site
.
register
(
Device
)
admin
.
site
.
register
(
History
)
admin
.
site
.
register
(
Lock
)
\ No newline at end of file
admin
.
site
.
register
(
Lock
)
admin
.
site
.
register
(
Record
)
\ No newline at end of file
...
...
api/models.py
View file @
9241eb1
...
...
@@ -3,19 +3,26 @@ from django.conf import settings
from
django.utils
import
timezone
# Create your models here.
class
Device
(
models
.
Model
)
:
username
=
models
.
CharField
(
max_length
=
255
)
and_id
=
models
.
CharField
(
max_length
=
255
,
primary_key
=
True
)
class
Door
(
models
.
Model
)
:
door_id
=
models
.
CharField
(
max_length
=
255
,
primary_key
=
True
)
class
Device
(
models
.
Model
)
:
rfid_id
=
models
.
CharField
(
max_length
=
255
,
primary_key
=
True
)
created
=
models
.
DateTimeField
(
default
=
timezone
.
now
)
class
Video
(
models
.
Model
)
:
vid
name
=
models
.
CharField
(
max_length
=
255
,
primary_key
=
True
)
vid
_id
=
models
.
IntegerField
(
primary_key
=
True
)
created
=
models
.
DateTimeField
(
default
=
timezone
.
now
)
s3_link
=
models
.
CharField
(
max_length
=
255
)
class
Lock
(
models
.
Model
)
:
door
=
models
.
ForeignKey
(
Door
,
on_delete
=
models
.
CASCADE
)
state
=
models
.
BooleanField
(
default
=
True
)
class
History
(
models
.
Model
)
:
device
=
models
.
ForeignKey
(
Device
,
on_delete
=
models
.
CASCADE
)
ctrtime
=
models
.
DateTimeField
(
default
=
timezone
.
now
)
\ No newline at end of file
device_name
=
models
.
CharField
(
max_length
=
255
)
ctrtime
=
models
.
DateTimeField
(
default
=
timezone
.
now
)
class
Record
(
models
.
Model
)
:
door
=
models
.
ForeignKey
(
Door
,
on_delete
=
models
.
CASCADE
)
recording
=
models
.
BooleanField
(
default
=
True
)
\ No newline at end of file
...
...
api/serializers.py
View file @
9241eb1
from
api.models
import
Device
,
Video
,
History
from
api.models
import
Device
,
Video
,
Lock
,
History
,
Record
,
Door
from
rest_framework
import
serializers
...
...
@@ -15,4 +15,9 @@ class VideoSerializer(serializers.ModelSerializer) :
class
HistorySerializer
(
serializers
.
ModelSerializer
)
:
class
Meta
:
model
=
History
fields
=
'__all__'
class
RecordSerializer
(
serializers
.
ModelSerializer
)
:
class
Meta
:
model
=
Record
fields
=
'__all__'
\ No newline at end of file
...
...
api/views.py
View file @
9241eb1
...
...
@@ -4,8 +4,8 @@ from django.core import serializers
from
django.core.exceptions
import
FieldDoesNotExist
,
ObjectDoesNotExist
from
django.shortcuts
import
render
from
api.models
import
Video
,
Device
,
History
,
Lock
from
api.serializers
import
VideoSerializer
,
DeviceSerializer
,
HistorySerializer
from
api.models
import
Video
,
Device
,
History
,
Lock
,
Record
,
Door
from
api.serializers
import
VideoSerializer
,
DeviceSerializer
,
HistorySerializer
,
RecordSerializer
from
rest_framework
import
status
from
rest_framework.views
import
APIView
...
...
@@ -20,18 +20,52 @@ from src.settings import S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_STORAGE_BUCK
from
datetime
import
datetime
,
timedelta
# Create your views here.
class
Video
(
APIView
)
:
# 비디오 목록 조회
class
VideoList
(
APIView
)
:
def
get
(
self
,
request
,
format
=
None
)
:
'''
request_id = request.GET.get('last_id') # requst의 last_id 받아옴
queryset = Video.objects.filter(vid_id__range = (request_id, request_id + 10)) # 쿼리셋 필터로 vid_id의 범위가 last_id ~ las_id + 10인 객체 찾기
'''
queryset
=
Video
.
objects
.
all
()
serializer
=
VideoSerializer
(
queryset
,
many
=
True
)
res
=
{
'videoList'
:
serializer
.
data
}
# 응답코드에 포함될 데이터
return
Response
(
res
,
status
=
status
.
HTTP_200_OK
)
# 비디오 수동 삭제
def
delete
(
self
,
request
,
vid_id
,
format
=
None
)
:
# request URI에 vid_id가 포함되어있음 : api/video/{vid_id}
try
:
request_id
=
vid_id
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
(
vid_id
=
request_id
)
s3
.
delete_object
(
Bucket
=
S3_STORAGE_BUCKET_NAME
,
Key
=
str
(
target
.
vid_id
))
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
)
# 비디오 확인(다운로드)
class
VideoDownload
(
APIView
)
:
def
get
(
self
,
request
,
vid_id
,
format
=
None
)
:
# 요청한 URI에 vid_id가 포함되어있음 ex) api/video/1
try
:
request_id
=
request
.
GET
.
get
(
'vidname'
)
request_id
=
vid_id
if
request_id
==
'None'
:
raise
FieldDoesNotExist
download_url
=
S3_ACCESS_URL
+
str
(
request_id
)
download_url
=
S3_ACCESS_URL
+
str
(
request_id
)
# S3 다운로드 링크 변환
if
not
download_url
:
raise
ObjectDoesNotExist
res
=
{
's3_link'
:
download_url
}
}
# 응답 코드에 보낼 데이터
return
Response
(
res
,
status
=
status
.
HTTP_200_OK
)
except
FieldDoesNotExist
as
error
:
return
Response
({
...
...
@@ -44,33 +78,48 @@ class Video(APIView) :
'date'
:
datetime
.
now
()
},
status
=
status
.
HTTP_404_NOT_FOUND
)
# 비디오 자동 삭제
class
CheckDate
(
APIView
)
:
def
delete
(
self
,
request
,
format
=
None
)
:
try
:
request_id
=
request
.
GET
.
get
(
'vidname'
)
if
request_id
==
'None'
:
raise
FieldDoesNotExist
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'
)
target
=
Video
.
objects
.
get
(
vidname
=
request_id
)
s3
.
delete_object
(
Bucket
=
S3_STORAGE_BUCKET_NAME
,
Key
=
str
(
target
.
vidname
))
target
.
delete
()
for
delvid
in
quaryset
:
s3
.
delete_object
(
Bucket
=
S3_STORAGE_BUCKET_NAME
,
Key
=
str
(
delvid
.
vid_id
))
quaryset
.
delete
()
return
Response
(
status
=
status
.
HTTP_200_OK
)
# 비디오 녹화 설정 조회/변경
class
Recording
(
APIView
)
:
def
get
(
self
,
request
,
format
=
None
)
:
try
:
'''
request_id = request.GET.get('door_id')
target = Record.objects.filter(door_id = request_id)
'''
target
=
Record
.
objects
.
all
()
serializer
=
RecordSerializer
(
target
,
many
=
True
)
res
=
{
'recording'
:
serializer
.
data
}
return
Response
(
res
,
status
=
status
.
HTTP_200_OK
)
except
FieldDoesNotExist
as
error
:
return
Response
({
'error'
:
"FieldDoesNotExist "
,
'date'
:
datetime
.
now
()
},
status
=
status
.
HTTP_400_BAD_REQUEST
)
class
CheckDate
(
APIView
)
:
def
delete
(
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
()
def
put
(
self
,
request
,
format
=
None
)
:
try
:
request_id
=
request
.
GET
.
get
(
'door_id'
)
if
not
request_id
:
raise
FieldDoesNotExist
target
=
Record
.
objects
.
filter
(
door_id
=
request_id
)
target
.
update
(
recording
=
request
.
data
[
'recording'
])
return
Response
(
status
=
status
.
HTTP_200_OK
)
except
FieldDoesNotExist
as
error
:
return
Response
({
'error'
:
"FieldDoesNotExist "
,
'date'
:
datetime
.
now
()
},
status
=
status
.
HTTP_400_BAD_REQUEST
)
...
...
src/urls.py
View file @
9241eb1
...
...
@@ -20,6 +20,8 @@ from api import views
urlpatterns
=
[
path
(
'admin/'
,
admin
.
site
.
urls
),
path
(
'video/<str:vidname>/'
,
views
.
Video
.
as_view
()),
path
(
'checkDate/'
,
views
.
CheckDate
.
as_view
()),
path
(
'api/video/'
,
views
.
VideoList
.
as_view
()),
path
(
'api/video/<int:vid_id>/'
,
views
.
VideoDownload
.
as_view
()),
path
(
'auto/checkDate/'
,
views
.
CheckDate
.
as_view
()),
path
(
'api/setting/'
,
views
.
Recording
.
as_view
()),
]
...
...
Please
register
or
login
to post a comment