Browse Source

Rest pour le parefeu

test_david
Dalahro 10 years ago
parent
commit
ec8228d955
  1. 1
      README.md
  2. 12
      machines/models.py
  3. 9
      machines/serializers.py
  4. 1
      machines/urls.py
  5. 28
      machines/views.py
  6. 1
      re2o/settings.py

1
README.md

@ -17,6 +17,7 @@ Dépendances :
* python3-dateutil (jessie-backports) * python3-dateutil (jessie-backports)
* texlive-latex-base * texlive-latex-base
* texlive-fonts-recommended * texlive-fonts-recommended
* python3-djangorestframework
Moteur de db conseillé (mysql), postgresql fonctionne également. Moteur de db conseillé (mysql), postgresql fonctionne également.
Pour mysql, il faut installer : Pour mysql, il faut installer :

12
machines/models.py

@ -7,12 +7,6 @@ class Machine(models.Model):
name = models.CharField(max_length=255, help_text="Optionnel", blank=True, null=True) name = models.CharField(max_length=255, help_text="Optionnel", blank=True, null=True)
active = models.BooleanField(default=True) active = models.BooleanField(default=True)
def is_active(self):
""" Renvoie si une interface doit avoir accès ou non """
machine = self.machine
user = machine.user
return machine.active and user.has_access()
def __str__(self): def __str__(self):
return str(self.user) + ' - ' + str(self.id) + ' - ' + str(self.name) return str(self.user) + ' - ' + str(self.id) + ' - ' + str(self.name)
@ -38,6 +32,12 @@ class Interface(models.Model):
details = models.CharField(max_length=255, blank=True) details = models.CharField(max_length=255, blank=True)
dns = models.CharField(help_text="Obligatoire et unique, doit se terminer en %s et ne pas comporter d'autres points" % ", ".join(Extension.objects.values_list('name', flat=True)), max_length=255, unique=True) dns = models.CharField(help_text="Obligatoire et unique, doit se terminer en %s et ne pas comporter d'autres points" % ", ".join(Extension.objects.values_list('name', flat=True)), max_length=255, unique=True)
def is_active(self):
""" Renvoie si une interface doit avoir accès ou non """
machine = self.machine
user = self.machine.user
return machine.active and user.has_access()
def __str__(self): def __str__(self):
return self.dns return self.dns

9
machines/serializers.py

@ -0,0 +1,9 @@
from rest_framework import serializers
from machines.models import Interface
class InterfaceSerializer( serializers.ModelSerializer):
class Meta:
model = Interface
fields = ('id','ipv4', 'mac_address')

1
machines/urls.py

@ -16,5 +16,6 @@ urlpatterns = [
url(r'^edit_extension/(?P<extensionid>[0-9]+)$', views.edit_extension, name='edit-extension'), url(r'^edit_extension/(?P<extensionid>[0-9]+)$', views.edit_extension, name='edit-extension'),
url(r'^del_extension/$', views.del_extension, name='del-extension'), url(r'^del_extension/$', views.del_extension, name='del-extension'),
url(r'^index_extension/$', views.index_extension, name='index-extension'), url(r'^index_extension/$', views.index_extension, name='index-extension'),
url(r'^rest/mac-ip/$', views.interface_list, name='interface-list'),
url(r'^$', views.index, name='index'), url(r'^$', views.index, name='index'),
] ]

28
machines/views.py

@ -1,6 +1,7 @@
# App de gestion des machines pour re2o # App de gestion des machines pour re2o
# Gabriel Détraz # Gabriel Détraz
# Gplv2 # Gplv2
from django.http import HttpResponse
from django.shortcuts import render, redirect from django.shortcuts import render, redirect
from django.shortcuts import render_to_response, get_object_or_404 from django.shortcuts import render_to_response, get_object_or_404
from django.core.context_processors import csrf from django.core.context_processors import csrf
@ -10,6 +11,10 @@ from django.contrib.auth.decorators import login_required, permission_required
from django.db.models import ProtectedError from django.db.models import ProtectedError
from django.forms import ValidationError from django.forms import ValidationError
from rest_framework.renderers import JSONRenderer
from machines.serializers import InterfaceSerializer
import re import re
from .forms import NewMachineForm, EditMachineForm, EditInterfaceForm, AddInterfaceForm, MachineTypeForm, DelMachineTypeForm, ExtensionForm, DelExtensionForm, BaseEditInterfaceForm, BaseEditMachineForm from .forms import NewMachineForm, EditMachineForm, EditInterfaceForm, AddInterfaceForm, MachineTypeForm, DelMachineTypeForm, ExtensionForm, DelExtensionForm, BaseEditInterfaceForm, BaseEditMachineForm
from .models import Machine, Interface, IpList, MachineType, Extension from .models import Machine, Interface, IpList, MachineType, Extension
@ -280,3 +285,26 @@ def index_machinetype(request):
def index_extension(request): def index_extension(request):
extension_list = Extension.objects.order_by('name') extension_list = Extension.objects.order_by('name')
return render(request, 'machines/index_extension.html', {'extension_list':extension_list}) return render(request, 'machines/index_extension.html', {'extension_list':extension_list})
""" Framework Rest """
class JSONResponse(HttpResponse):
def __init__(self, data, **kwargs):
datas=[]
for d in data:
interface = Interface.objects.get(pk=d["id"])
d.pop("id")
if d["ipv4"] and interface.is_active():
d["ipv4"]= IpList.objects.get(pk=d["ipv4"]).__str__()
datas.append(d)
content = JSONRenderer().render(datas)
kwargs['content_type'] = 'application/json'
super(JSONResponse, self).__init__(content, **kwargs)
def interface_list(request):
interfaces = Interface.objects.all()
seria = InterfaceSerializer(interfaces, many=True)
return JSONResponse(seria.data)

1
re2o/settings.py

@ -48,6 +48,7 @@ INSTALLED_APPS = (
'topologie', 'topologie',
'search', 'search',
'logs', 'logs',
'rest_framework'
) )
MIDDLEWARE_CLASSES = ( MIDDLEWARE_CLASSES = (

Loading…
Cancel
Save