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-19 12:33:15 +0900
Browse Files
Options
Browse Files
Download
Plain Diff
Commit
0dbcf4b44327aa97a4c8effb8907cc9d3637ab0c
0dbcf4b4
2 parents
b2d600c3
c75022af
Add RFIDProcess, RemoteProcess & Add 기기추가요청api, 원격잠금해제api
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
163 additions
and
19 deletions
.gitignore
api/admin.py
api/migrations/0001_initial.py
api/models.py
api/serializers.py
api/views.py
process/doorlock.py
src/urls.py
.gitignore
View file @
0dbcf4b
...
...
@@ -5,3 +5,5 @@ db.sqlite3
/static
.DS_Store
*.json
venv/
.idea/
...
...
api/admin.py
View file @
0dbcf4b
from
django.contrib
import
admin
from
.models
import
Video
,
Device
,
History
,
Lock
,
Record
,
Door
from
.models
import
Video
,
Device
,
Remote
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
(
Remote
History
)
admin
.
site
.
register
(
Lock
)
admin
.
site
.
register
(
Record
)
\ No newline at end of file
...
...
api/migrations/0001_initial.py
View file @
0dbcf4b
...
...
@@ -15,7 +15,8 @@ class Migration(migrations.Migration):
migrations
.
CreateModel
(
name
=
'Device'
,
fields
=
[
(
'rfid_id'
,
models
.
CharField
(
max_length
=
255
,
primary_key
=
True
,
serialize
=
False
)),
(
'device_id'
,
models
.
AutoField
(
primary_key
=
True
,
serialize
=
False
)),
(
'rfid_id'
,
models
.
CharField
(
max_length
=
255
)),
(
'created'
,
models
.
DateTimeField
(
default
=
django
.
utils
.
timezone
.
now
)),
],
),
...
...
@@ -26,14 +27,6 @@ class Migration(migrations.Migration):
],
),
migrations
.
CreateModel
(
name
=
'History'
,
fields
=
[
(
'id'
,
models
.
AutoField
(
auto_created
=
True
,
primary_key
=
True
,
serialize
=
False
,
verbose_name
=
'ID'
)),
(
'device_name'
,
models
.
CharField
(
max_length
=
255
)),
(
'ctrtime'
,
models
.
DateTimeField
(
default
=
django
.
utils
.
timezone
.
now
)),
],
),
migrations
.
CreateModel
(
name
=
'Lock'
,
fields
=
[
(
'id'
,
models
.
IntegerField
(
primary_key
=
True
,
serialize
=
False
)),
...
...
@@ -48,6 +41,14 @@ class Migration(migrations.Migration):
],
),
migrations
.
CreateModel
(
name
=
'RemoteHistory'
,
fields
=
[
(
'id'
,
models
.
AutoField
(
auto_created
=
True
,
primary_key
=
True
,
serialize
=
False
,
verbose_name
=
'ID'
)),
(
'device_name'
,
models
.
CharField
(
max_length
=
255
)),
(
'ctrtime'
,
models
.
DateTimeField
(
default
=
django
.
utils
.
timezone
.
now
)),
],
),
migrations
.
CreateModel
(
name
=
'Video'
,
fields
=
[
(
'vid_name'
,
models
.
CharField
(
max_length
=
255
,
primary_key
=
True
,
serialize
=
False
)),
...
...
api/models.py
View file @
0dbcf4b
...
...
@@ -7,7 +7,8 @@ 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
)
device_id
=
models
.
AutoField
(
primary_key
=
True
)
rfid_id
=
models
.
CharField
(
max_length
=
255
)
created
=
models
.
DateTimeField
(
default
=
timezone
.
now
)
class
Video
(
models
.
Model
)
:
...
...
@@ -20,9 +21,9 @@ class Lock(models.Model) :
id
=
models
.
IntegerField
(
primary_key
=
True
)
state
=
models
.
BooleanField
(
default
=
True
)
class
History
(
models
.
Model
)
:
class
Remote
History
(
models
.
Model
)
:
device_name
=
models
.
CharField
(
max_length
=
255
)
c
trtime
=
models
.
DateTimeField
(
default
=
timezone
.
now
)
c
reated
=
models
.
DateTimeField
(
default
=
timezone
.
now
)
class
Record
(
models
.
Model
)
:
id
=
models
.
IntegerField
(
primary_key
=
True
)
...
...
api/serializers.py
View file @
0dbcf4b
from
api.models
import
Device
,
Video
,
Lock
,
History
,
Record
,
Door
,
AddDevice
from
api.models
import
Device
,
Video
,
Lock
,
Remote
History
,
Record
,
Door
,
AddDevice
from
rest_framework
import
serializers
class
DoorSerializer
(
serializers
.
ModelSerializer
)
:
...
...
@@ -16,9 +16,9 @@ class VideoSerializer(serializers.ModelSerializer) :
model
=
Video
fields
=
'__all__'
class
HistorySerializer
(
serializers
.
ModelSerializer
)
:
class
Remote
HistorySerializer
(
serializers
.
ModelSerializer
)
:
class
Meta
:
model
=
History
model
=
Remote
History
fields
=
'__all__'
class
RecordSerializer
(
serializers
.
ModelSerializer
)
:
...
...
api/views.py
View file @
0dbcf4b
...
...
@@ -7,8 +7,9 @@ from django.core.exceptions import FieldDoesNotExist, ObjectDoesNotExist
from
django.shortcuts
import
render
from
api.videorecord
import
record
from
api.models
import
Video
,
Device
,
History
,
Lock
,
Record
,
Door
,
AddDevice
from
api.serializers
import
VideoSerializer
,
DeviceSerializer
,
HistorySerializer
,
RecordSerializer
from
api.models
import
Video
,
Device
,
RemoteHistory
,
Lock
,
Record
,
Door
from
api.serializers
import
VideoSerializer
,
DeviceSerializer
,
RemoteHistorySerializer
,
RecordSerializer
,
LockSerializer
from
rest_framework
import
status
from
rest_framework.views
import
APIView
...
...
@@ -22,8 +23,143 @@ from src.settings import S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_STORAGE_BUCK
"""
import
time
from
datetime
import
datetime
,
timedelta
import
json
# Create your views here.
#로그인 및 토큰 반환
class
Login
(
APIView
)
:
def
get
(
self
,
request
,
format
=
None
)
:
# request query에 door_id 포함되어있음 : api/auth?door_id=12345
try
:
request_id
=
request
.
GET
.
get
(
'door_id'
,
None
)
if
request_id
==
None
:
raise
FieldDoesNotExist
queryset
=
Door
.
objects
.
filter
(
door_id
=
request_id
)
# door_id 유효성 검색
if
queryset
.
exists
()
:
# 유효할 때
res
=
{
'is_available'
:
True
,
'access_token'
:
'토큰'
# 토큰 도입 후 수정 필요
}
else
:
res
=
{
'is_available'
:
False
}
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
)
#기기 관련 api
class
Devices
(
APIView
)
:
# 기기 목록 조회
def
get
(
self
,
request
,
format
=
None
)
:
queryset
=
Device
.
objects
.
all
()
serializer
=
DeviceSerializer
(
queryset
,
many
=
True
)
res
=
{
'deviceList'
:
serializer
.
data
}
return
Response
(
res
,
status
=
status
.
HTTP_200_OK
)
# 기기 추가 요청
def
put
(
self
,
request
,
format
=
None
)
:
try
:
print
(
request
.
body
)
data
=
json
.
loads
(
request
.
body
)
rfid_id
=
data
.
get
(
'rfid_id'
,
None
)
res
=
{
'rfid_id'
:
rfid_id
}
if
rfid_id
==
None
:
raise
FieldDoesNotExist
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
)
# 기기 추가
def
post
(
self
,
request
,
format
=
None
)
:
# request body에 rfid_id 포함되어있음
try
:
print
(
request
.
body
)
data
=
json
.
loads
(
request
.
body
)
request_id
=
data
.
get
(
'rfid_id'
,
None
)
if
request_id
==
None
:
raise
FieldDoesNotExist
queryset
=
Device
.
objects
.
create
(
rfid_id
=
request_id
)
return
Response
({
'msg'
:
'success device add'
})
except
FieldDoesNotExist
as
error
:
return
Response
({
'error'
:
"FieldDoesNotExist "
,
'date'
:
datetime
.
now
()
},
status
=
status
.
HTTP_400_BAD_REQUEST
)
# 기기 삭제
def
delete
(
self
,
request
,
device_id
,
format
=
None
):
# request URI에 device_id(자동생성되는 기기 고유 번호 != rfid_id) 포함
try
:
request_id
=
device_id
if
request_id
==
None
:
raise
FieldDoesNotExist
queryset
=
Device
.
objects
.
get
(
device_id
=
request_id
)
queryset
.
delete
()
return
Response
({
'msg'
:
'success delete device'
})
except
FieldDoesNotExist
as
error
:
return
Response
({
'error'
:
"FieldDoesNotExist "
,
'date'
:
datetime
.
now
()
},
status
=
status
.
HTTP_400_BAD_REQUEST
)
# 원격 잠금 해제
class
Remote
(
APIView
):
# 원격 잠금 해제 기록 조회
def
get
(
self
,
request
,
format
=
None
)
:
#models.py의 class History 사용.
queryset
=
RemoteHistory
.
objects
.
all
()
serializer
=
RemoteHistorySerializer
(
queryset
,
many
=
True
)
res
=
{
"remoteHistoryList"
:
serializer
.
data
}
return
Response
(
res
,
status
=
status
.
HTTP_200_OK
)
# 원격 잠금 해제
def
post
(
self
,
request
,
format
=
None
)
:
try
:
print
(
request
.
body
)
data
=
json
.
loads
(
request
.
body
)
device_name
=
data
.
get
(
'device_name'
,
None
)
if
device_name
==
None
:
raise
FieldDoesNotExist
else
:
# 잠금 상태 변경
target
=
Lock
.
objects
.
get
(
id
=
1
)
serializer
=
LockSerializer
(
target
,
many
=
False
)
state
=
serializer
.
data
[
'state'
]
if
state
==
True
:
print
(
">> 원격 잠금해제 요청이 들어옴"
)
target
.
state
=
False
target
.
save
()
return
Response
({
'msg'
:
'success remote unlock'
},
status
=
status
.
HTTP_200_OK
)
except
FieldDoesNotExist
as
error
:
return
Response
({
'error'
:
"FieldDoesNotExist "
,
'date'
:
datetime
.
now
()
},
status
=
status
.
HTTP_400_BAD_REQUEST
)
# 비디오 목록 조회
class
VideoList
(
APIView
)
:
def
get
(
self
,
request
,
format
=
None
)
:
...
...
process/doorlock.py
View file @
0dbcf4b
This diff is collapsed. Click to expand it.
src/urls.py
View file @
0dbcf4b
...
...
@@ -24,4 +24,8 @@ urlpatterns = [
path
(
'api/video/<str:vid_name>'
,
views
.
VideoDownload
.
as_view
()),
path
(
'auto/checkDate'
,
views
.
CheckDate
.
as_view
()),
path
(
'api/setting'
,
views
.
Recording
.
as_view
()),
path
(
'api/auth'
,
views
.
Login
.
as_view
()),
path
(
'api/device'
,
views
.
Devices
.
as_view
()),
path
(
'api/device/<str:device_id>'
,
views
.
Devices
.
as_view
()),
path
(
'api/remote'
,
views
.
Remote
.
as_view
()),
]
...
...
Please
register
or
login
to post a comment