김유현

Add RFIDProcess, RemoteProcess & Add 기기추가요청api, 원격잠금해제api

......@@ -5,3 +5,5 @@ db.sqlite3
/static
.DS_Store
*.json
venv/
.idea/
......
from django.contrib import admin
from .models import Video, Device, History, Lock, Record, Door
from .models import Video, Device, RemoteHistory, 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(RemoteHistory)
admin.site.register(Lock)
admin.site.register(Record)
\ No newline at end of file
......
......@@ -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)),
......
......@@ -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 RemoteHistory(models.Model) :
device_name = models.CharField(max_length = 255)
ctrtime = models.DateTimeField(default = timezone.now)
created = models.DateTimeField(default = timezone.now)
class Record(models.Model) :
id = models.IntegerField(primary_key = True)
......
from api.models import Device, Video, Lock, History, Record, Door, AddDevice
from api.models import Device, Video, Lock, RemoteHistory, 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 RemoteHistorySerializer(serializers.ModelSerializer) :
class Meta :
model = History
model = RemoteHistory
fields = '__all__'
class RecordSerializer(serializers.ModelSerializer) :
......
......@@ -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) :
......
This diff is collapsed. Click to expand it.
......@@ -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()),
]
......