8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-12-24 16:03:47 +00:00

Ajoute la recherche et l'edition des machines

This commit is contained in:
Gabriel Detraz 2016-07-04 02:48:24 +02:00
parent a8590ecbc0
commit 9578b60e51
18 changed files with 332 additions and 26 deletions

View file

@ -3,7 +3,7 @@ from django.contrib import admin
from .models import Machine, MachineType, IpList, Interface
class MachineAdmin(admin.ModelAdmin):
list_display = ('user','type')
list_display = ('user','name','type')
class MachineTypeAdmin(admin.ModelAdmin):
list_display = ('type',)
@ -12,7 +12,7 @@ class IpListAdmin(admin.ModelAdmin):
list_display = ('ipv4',)
class InterfaceAdmin(admin.ModelAdmin):
list_display = ('machine','name','mac_address','ipv4','details')
list_display = ('machine','dns','mac_address','ipv4','details')
admin.site.register(Machine, MachineAdmin)
admin.site.register(MachineType, MachineTypeAdmin)

View file

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
import macaddress.fields
class Migration(migrations.Migration):
dependencies = [
('machines', '0002_auto_20160703_1444'),
]
operations = [
migrations.AlterField(
model_name='interface',
name='mac_address',
field=macaddress.fields.MACAddressField(integer=True, unique=True),
),
]

View file

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('machines', '0003_auto_20160703_1450'),
]
operations = [
migrations.AlterField(
model_name='iplist',
name='ipv4',
field=models.GenericIPAddressField(protocol='IPv4', unique=True),
),
]

View file

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('machines', '0004_auto_20160703_1451'),
]
operations = [
migrations.RenameField(
model_name='interface',
old_name='name',
new_name='dns',
),
migrations.AddField(
model_name='machine',
name='name',
field=models.CharField(blank=True, unique=True, max_length=255, help_text='Optionnel'),
),
]

View file

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('machines', '0005_auto_20160703_1523'),
]
operations = [
migrations.AlterField(
model_name='interface',
name='details',
field=models.CharField(max_length=255, blank=True),
),
migrations.AlterField(
model_name='interface',
name='dns',
field=models.CharField(max_length=255, unique=True),
),
]

View file

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('machines', '0006_auto_20160703_1813'),
]
operations = [
migrations.AlterField(
model_name='interface',
name='ipv6',
field=models.GenericIPAddressField(null=True, protocol='IPv6'),
),
]

View file

@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('machines', '0007_auto_20160703_1816'),
]
operations = [
migrations.RemoveField(
model_name='interface',
name='ipv6',
),
]

View file

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
import macaddress.fields
class Migration(migrations.Migration):
dependencies = [
('machines', '0008_remove_interface_ipv6'),
]
operations = [
migrations.AlterField(
model_name='interface',
name='mac_address',
field=macaddress.fields.MACAddressField(integer=False, max_length=17, unique=True),
),
]

View file

@ -1,4 +1,5 @@
from django.db import models
from django.forms import ModelForm, Form
from macaddress.fields import MACAddressField
from users.models import User
@ -6,9 +7,10 @@ from users.models import User
class Machine(models.Model):
user = models.ForeignKey('users.User', on_delete=models.PROTECT)
type = models.ForeignKey('MachineType', on_delete=models.PROTECT)
name = models.CharField(max_length=255, help_text="Optionnel", unique=True, blank=True)
def __str__(self):
return self.type
return str(self.user) + ' - ' + str(self.id) + ' - ' + str(self.name)
class MachineType(models.Model):
type = models.CharField(max_length=255)
@ -19,17 +21,49 @@ class MachineType(models.Model):
class Interface(models.Model):
ipv4 = models.OneToOneField('IpList', on_delete=models.PROTECT, blank=True, null=True)
ipv6 = models.GenericIPAddressField(protocol='IPv6')
mac_address = MACAddressField()
#ipv6 = models.GenericIPAddressField(protocol='IPv6', null=True)
mac_address = MACAddressField(integer=False, unique=True)
machine = models.ForeignKey('Machine', on_delete=models.PROTECT)
details = models.CharField(max_length=255)
name = models.CharField(max_length=255, unique=True, blank=True)
details = models.CharField(max_length=255, blank=True)
dns = models.CharField(max_length=255, unique=True)
def __str__(self):
return self.name
return self.dns
class IpList(models.Model):
ipv4 = models.GenericIPAddressField(protocol='IPv4')
ipv4 = models.GenericIPAddressField(protocol='IPv4', unique=True)
def __str__(self):
return self.type
return self.ipv4
class EditMachineForm(ModelForm):
class Meta:
model = Machine
fields = '__all__'
def __init__(self, *args, **kwargs):
super(EditMachineForm, self).__init__(*args, **kwargs)
self.fields['name'].label = 'Nom de la machine (optionnel)'
self.fields['type'].label = 'Type de machine'
class NewMachineForm(EditMachineForm):
class Meta(EditMachineForm.Meta):
fields = ['type','name']
class EditInterfaceForm(ModelForm):
class Meta:
model = Interface
fields = '__all__'
def __init__(self, *args, **kwargs):
super(EditInterfaceForm, self).__init__(*args, **kwargs)
self.fields['dns'].label = 'Nom dns de la machine (unique)'
self.fields['mac_address'].label = 'Adresse mac'
class AddInterfaceForm(EditInterfaceForm):
class Meta(EditInterfaceForm.Meta):
fields = ['ipv4','mac_address','dns','details']
class NewInterfaceForm(EditInterfaceForm):
class Meta(EditInterfaceForm.Meta):
fields = ['mac_address','dns','details']

View file

@ -0,0 +1,23 @@
<table class="table table-striped">
<thead>
<tr>
<th>Nom dns</th>
<th>Proprietaire</th>
<th>Type</th>
<th>Mac</th>
<th>Ipv4</th>
<th></th>
</tr>
</thead>
{% for machine in machine_list %}
<tr>
<td>{{ machine.dns }}</td>
<td>{{ machine.machine.user }}</td>
<td>{{ machine.machine.type }}</td>
<td>{{ machine.mac_address }}</td>
<td>{{ machine.ipv4 }}</td>
<td><a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:edit-machine' machine.id %}"><i class="glyphicon glyphicon-tree-conifer"></i> Editer</a></td>
</tr>
{% endfor %}
</table>

View file

@ -0,0 +1,12 @@
{% extends "machines/sidebar.html" %}
{% load bootstrap3 %}
{% block title %}Machines{% endblock %}
{% block content %}
{% include "machines/aff_machines.html" with machines_list=machines_list %}
<br />
<br />
<br />
{% endblock %}

View file

@ -0,0 +1,19 @@
{% extends "machines/sidebar.html" %}
{% load bootstrap3 %}
{% block title %}Création et modification de machines{% endblock %}
{% block content %}
{% bootstrap_form_errors machineform %}
{% bootstrap_form_errors interfaceform %}
<form class="form" method="post">
{% csrf_token %}
{% bootstrap_form machineform %}
{% bootstrap_form interfaceform %}
{% bootstrap_button "Créer ou modifier" button_type="submit" icon="star" %}
</form>
<br />
<br />
<br />
{% endblock %}

View file

@ -0,0 +1,5 @@
{% extends "base.html" %}
{% block sidebar %}
<p><a href="{% url "search:search" %}">Nouvelle machine</a></p>
{% endblock %}

10
machines/urls.py Normal file
View file

@ -0,0 +1,10 @@
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^new_machine/(?P<userid>[0-9]+)$', views.new_machine, name='new-machine'),
url(r'^edit_machine/(?P<interfaceid>[0-9]+)$', views.edit_machine, name='edit-machine'),
url(r'^new_interface/(?P<machineid>[0-9]+)$', views.new_interface, name='new-interface'),
url(r'^$', views.index, name='index'),
]

View file

@ -1,3 +1,72 @@
from django.shortcuts import render
# App de gestion des machines pour re2o
# Gabriel Détraz
# Gplv2
from django.shortcuts import render, redirect
from django.shortcuts import render_to_response, get_object_or_404
from django.core.context_processors import csrf
from django.template import Context, RequestContext, loader
from django.contrib import messages
# Create your views here.
from .models import NewMachineForm, EditMachineForm, EditInterfaceForm, AddInterfaceForm, NewInterfaceForm
from .models import Machine, Interface
from users.models import User
def form(ctx, template, request):
c = ctx
c.update(csrf(request))
return render_to_response(template, c, context_instance=RequestContext(request))
def new_machine(request, userid):
try:
user = User.objects.get(pk=userid)
except User.DoesNotExist:
messages.error(request, u"Utilisateur inexistant" )
return redirect("/machines/")
machine = NewMachineForm(request.POST or None)
interface = NewInterfaceForm(request.POST or None)
if machine.is_valid() and interface.is_valid():
new_machine = machine.save(commit=False)
new_machine.user = user
new_machine.save()
new_interface = interface.save(commit=False)
new_interface.machine = new_machine
new_interface.save()
messages.success(request, "La machine a été crée")
return redirect("/users/")
return form({'machineform': machine, 'interfaceform': interface}, 'machines/machine.html', request)
def edit_machine(request, interfaceid):
try:
interface = Interface.objects.get(pk=interfaceid)
except Interface.DoesNotExist:
messages.error(request, u"Interface inexistante" )
return redirect("/machines")
machine_form = EditMachineForm(request.POST or None, instance=interface.machine)
interface_form = EditInterfaceForm(request.POST or None, instance=interface)
if machine_form.is_valid() and interface_form.is_valid():
machine_form.save()
interface_form.save()
messages.success(request, "La machine a été modifiée")
return redirect("/users/")
return form({'machineform': machine_form, 'interfaceform': interface_form}, 'machines/machine.html', request)
def new_interface(request, machineid):
try:
machine = Machine.objects.get(pk=machineid)
except Machine.DoesNotExist:
messages.error(request, u"Machine inexistante" )
return redirect("/machines")
interface_form = AddInterfaceForm(request.POST or None)
machine_form = EditMachineForm(request.POST or None, instance=machine)
if interface_form.is_valid() and machine_form.is_valid():
machine_form.save()
new_interface = interface_form.save(commit=False)
new_interface.machine = machine
new_interface.save()
messages.success(request, "L'interface a été ajoutée")
return redirect("/users/")
return form({'machineform': machine_form, 'interfaceform': interface_form}, 'machines/machine.html', request)
def index(request):
machine_list = Interface.objects.order_by('pk')
return render(request, 'machines/index.html', {'machine_list': machine_list})

View file

@ -23,5 +23,6 @@ urlpatterns = [
url(r'^users/', include('users.urls', namespace='users')),
url(r'^search/', include('search.urls', namespace='search')),
url(r'^cotisations/', include('cotisations.urls', namespace='cotisations')),
url(r'^machines/', include('machines.urls', namespace='machines')),
#url(r'^logs/', include('logs.urls', namespace='logs')),
]

View file

@ -10,18 +10,7 @@
{% endif%}
{% if machine_list %}
<h2>Résultats dans les machines : </h2>
<table class="table table-striped">
<thead>
<tr>
<th>Nom</th>
</tr>
</thead>
{% for machine in machine_list %}
<tr>
<td>{{ machine.name }}</td>
</tr>
{% endfor %}
</table>
{% include "machines/aff_machines.html" with machine_list=machine_list %}
{% endif %}
{% if facture_list %}
<h2>Résultats dans les factures : </h2>

View file

@ -8,7 +8,7 @@ from django.template import Context, RequestContext, loader
from django.db.models import Q
from users.models import User, Ban
from machines.models import Machine
from machines.models import Machine, Interface
from cotisations.models import Facture
from search.models import SearchForm
from users.views import has_access
@ -31,8 +31,8 @@ def search(request):
connexion = []
for user in users:
connexion.append([user, has_access(user)])
machines = None
query = Q(user__pseudo__icontains = search) | Q(user__name__icontains = search) | Q(user__surname__icontains = search)
machines = Interface.objects.filter(machine=Machine.objects.filter(query)) | Interface.objects.filter(Q(dns__icontains = search))
factures = Facture.objects.filter(query)
bans = Ban.objects.filter(query)
return form({'users_list': connexion, 'machine_list' : machines, 'facture_list' : factures, 'ban_list' : bans}, 'search/index.html',request)