Моя веб панель управления ubuntu серверами. Часть 2.

3 января 2020 г. Теги:

Связь front части web приложения и в будущем для связи с Android приложением реализую API. Конечно можно было это реализовать через самостоятельные классы которые будут обрабатывать запросы и отдавать JSON ответы ( Как-то мне приходилось так работать так как концепция команды в которой я в тот момент работал подразумевала именно такой подход). Но уже давно существует довольно замечательный фреймворк Django REST framework.

Итак, в начале для каждой модели описываю сериализацию

from rest_framework import serializers

from .models import NetDevices, Departments, Employee


class DepartmentsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Departments
        fields = '__all__'

class EmployeeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Employee
        fields = '__all__'


class NetDevicesSerializer(serializers.ModelSerializer):
    department_name = serializers.CharField(read_only=True)
    employee_name = serializers.CharField(read_only=True)
    host_ip = serializers.CharField(read_only=True)

    class Meta:
        model = NetDevices
        fields = '__all__'

    def create(self, validated_data):
        print(validated_data)
        return super().create(validated_data)

from rest_framework import serializers


class HostSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    ip = serializers.IPAddressField()
    mac = serializers.IPAddressField()
    vendor = serializers.CharField()
    active = serializers.BooleanField(required=False)


class RegisteredHostSerializer(serializers.Serializer):
    DT_RowId = serializers.IntegerField(source="id", read_only=True)
    id = serializers.IntegerField(read_only=True)
    ip = serializers.IPAddressField()
    mac = serializers.IPAddressField()
    hostname = serializers.CharField()
    subnet = serializers.IPAddressField()
    routes = serializers.IPAddressField()
    dns = serializers.IPAddressField()

Далее описал представления. С помощью APIView отдаю простые JSON ответы, а с viewsets.ModelViewSet позволяет реализовать стандартные запросы GET, POST, PUT, DELETE. Пример API представления:

from django.contrib.auth.models import User

from rest_framework import serializers, viewsets
from rest_framework.views import APIView
from rest_framework.response import Response

from .models import Host, RegisteredHost
from .serializers import HostSerializer, RegisteredHostSerializer
from .facade import ControlDhcpServer


class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ['url', 'username', 'email', 'is_staff']


class ApiUserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer


class ApiUnknow_clients(APIView):
    def get(self, request, format=None):
        return Response(ControlDhcpServer().unknow_cliets)


class ApiRegistered_clients(APIView):
    def get(self, request, format=None):
        return Response(ControlDhcpServer().dhcp_clients)


class ApiClientOnline(APIView):
    def get(self, request, format=None):
        host_active = HostSerializer(Host.objects.filter(active=True),
                                     many=True)
        return Response({'host': host_active.data})


class ApiCountClientOnline(APIView):
    def get(self, request, format=None):
        return Response(Host.objects.filter(active=True).count())


class ApiHostsInDhcpServer(viewsets.ModelViewSet):
    queryset = RegisteredHost.objects.all()
    serializer_class = RegisteredHostSerializer

© 2019. Tumanov Nikolay.
Все права защищены. При использовании материалов сайта ссылка обязательна.
Условия использования персональных данных

Разработка сайта - Tumanov Nikolay