restpi/pins/views.py

66 wiersze
2.0 KiB
Python
Czysty Zwykły widok Historia

2019-01-28 00:09:01 +00:00
from django.shortcuts import render
2019-02-01 20:57:20 +00:00
from django.views.generic import TemplateView
2019-01-28 00:09:01 +00:00
from rest_framework.response import Response
2019-01-28 21:58:55 +00:00
from rest_framework.permissions import AllowAny, IsAuthenticated
2019-01-28 00:09:01 +00:00
# Create your views here.
from picontrol.control import read_pin, read_all_pin, write_pin_value, write_pin_mode
from pins.pagination import PaginationAPIView
from pins.serializers import PinSerializer
2019-02-01 20:57:20 +00:00
class PinIndexView(TemplateView):
2019-01-28 21:58:55 +00:00
template_name = 'pins/index.html'
2019-01-28 00:09:01 +00:00
class PinView(PaginationAPIView):
serializer_class = PinSerializer
2019-01-28 21:58:55 +00:00
def get_permissions(self):
if self.request.method == 'GET':
self.permission_classes = [AllowAny, ]
else:
self.permission_classes = [IsAuthenticated, ]
return super(PinView, self).get_permissions()
2019-01-28 00:09:01 +00:00
def get(self, request, pin=None):
if pin:
pin = int(pin)
response = read_pin(pin)
return Response(data=response)
else:
queryset = read_all_pin()
page = self.paginate_queryset(queryset)
if page is not None:
return self.get_paginated_response(page)
serializer = self.serializer_class(queryset, many=True)
return Response(serializer.data)
def post(self, request, pin=None):
if not pin:
return Response({"physical": "No pin number."})
serializer = self.serializer_class(data=request.data)
serializer.is_valid(raise_exception=True)
mode = serializer.validated_data.pop("mode", None)
value = serializer.validated_data.pop("value", None)
2019-01-28 21:58:55 +00:00
physical = pin
2019-01-28 00:09:01 +00:00
if mode is None and value is None:
response = {"operation": False, "pin": read_pin(physical)}
return Response(data=response)
if mode is not None:
response = write_pin_mode(physical, mode)
if value is not None:
response = write_pin_value(physical, value)
data = {"operation": True, "pin": response}
return Response(data=data)