Skip to content

Instantly share code, notes, and snippets.

@paderinandrey
Last active January 4, 2022 20:56
Show Gist options
  • Save paderinandrey/f4613e14ed933bb7437054eeb6e4552b to your computer and use it in GitHub Desktop.
Save paderinandrey/f4613e14ed933bb7437054eeb6e4552b to your computer and use it in GitHub Desktop.
Rebrain:Python Django
# Generated by Django 4.0 on 2022-01-04 00:43
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('rbr_srv_side', '0002_server_server_is_active'),
]
operations = [
migrations.CreateModel(
name='Metric',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('data', models.JSONField()),
('receive_at', models.DateTimeField(default=django.utils.timezone.now)),
('server', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rbr_srv_side.server')),
],
options={
'verbose_name': 'Metric',
'managed': True,
},
),
]
from django.db import models
from django.utils import timezone
class Server(models.Model):
name = models.CharField('name', max_length=255)
ip_address = models.GenericIPAddressField(
'IP', max_length=16, default='0.0.0.0')
description = models.TextField(
'description', max_length=255, default='no_description')
server_is_active = models.BooleanField('Server is active', default=False)
class Meta:
managed = True
verbose_name = 'Server'
class Metric(models.Model):
server = models.ForeignKey(Server, on_delete=models.CASCADE)
data = models.JSONField()
receive_at = models.DateTimeField(default=timezone.now)
class Meta:
managed = True
verbose_name = 'Metric'
from rest_framework import serializers
from .models import Metric, Server
class ServerSerializer(serializers.ModelSerializer):
class Meta:
model = Server
fields = ['id', 'ip_address', 'description',
'name', 'server_is_active']
class ShortServerSerializer(serializers.ModelSerializer):
class Meta:
model = Server
fields = ['ip_address', 'server_is_active']
class MetricSerializer(serializers.ModelSerializer):
class Meta:
model = Metric
fields = ['server', 'data', 'receive_at']
from django.urls import path
from .views import ServerViewSet, ServerDetailView, ServerAddView, ShortServerViewSet, MetricView
urlpatterns = [
path('servers/', ServerViewSet.as_view()),
path('servers/status', ShortServerViewSet.as_view()),
path('servers/<int:pk>', ServerDetailView.as_view()),
path('servers/add', ServerAddView.as_view()),
path('servers/<int:pk>/metrics', MetricView.as_view()),
]
from rest_framework import generics
from .serializer import ServerSerializer, ShortServerSerializer, MetricSerializer
from .models import Server, Metric
from django.shortcuts import get_object_or_404
# from rest_framework.response import Response
from rest_framework.parsers import JSONParser
from django.http import JsonResponse
class ServerViewSet(generics.ListAPIView):
queryset = Server.objects.all()
serializer_class = ServerSerializer
class ShortServerViewSet(generics.ListAPIView):
queryset = Server.objects.all()
serializer_class = ShortServerSerializer
class ServerAddView(generics.CreateAPIView):
queryset = Server.objects.all()
serializer_class = ServerSerializer
class ServerDetailView(generics.RetrieveUpdateDestroyAPIView):
queryset = Server.objects.all()
serializer_class = ServerSerializer
class MetricView(generics.CreateAPIView):
queryset = Metric.objects.all()
serializer_class = MetricSerializer
def perform_create(self, serializer):
server_pk = self.kwargs['pk']
server = Server.objects.get(pk=server_pk)
serializer.save(server=server)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment