Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
R
re2o
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Nounous
re2o
Commits
30536f6a
Commit
30536f6a
authored
Jul 04, 2016
by
chirac
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Ajoute la recherche et l'edition des machines
parent
0fe552f0
Changes
18
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
332 additions
and
26 deletions
+332
-26
machines/admin.py
machines/admin.py
+2
-2
machines/migrations/0003_auto_20160703_1450.py
machines/migrations/0003_auto_20160703_1450.py
+20
-0
machines/migrations/0004_auto_20160703_1451.py
machines/migrations/0004_auto_20160703_1451.py
+19
-0
machines/migrations/0005_auto_20160703_1523.py
machines/migrations/0005_auto_20160703_1523.py
+24
-0
machines/migrations/0006_auto_20160703_1813.py
machines/migrations/0006_auto_20160703_1813.py
+24
-0
machines/migrations/0007_auto_20160703_1816.py
machines/migrations/0007_auto_20160703_1816.py
+19
-0
machines/migrations/0008_remove_interface_ipv6.py
machines/migrations/0008_remove_interface_ipv6.py
+18
-0
machines/migrations/0009_auto_20160703_2358.py
machines/migrations/0009_auto_20160703_2358.py
+20
-0
machines/models.py
machines/models.py
+42
-8
machines/templates/machines/aff_machines.html
machines/templates/machines/aff_machines.html
+23
-0
machines/templates/machines/index.html
machines/templates/machines/index.html
+12
-0
machines/templates/machines/machine.html
machines/templates/machines/machine.html
+19
-0
machines/templates/machines/sidebar.html
machines/templates/machines/sidebar.html
+5
-0
machines/urls.py
machines/urls.py
+10
-0
machines/views.py
machines/views.py
+71
-2
re2o/urls.py
re2o/urls.py
+1
-0
search/templates/search/index.html
search/templates/search/index.html
+1
-12
search/views.py
search/views.py
+2
-2
No files found.
machines/admin.py
View file @
30536f6a
...
...
@@ -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
)
...
...
machines/migrations/0003_auto_20160703_1450.py
0 → 100644
View file @
30536f6a
# -*- 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
),
),
]
machines/migrations/0004_auto_20160703_1451.py
0 → 100644
View file @
30536f6a
# -*- 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
),
),
]
machines/migrations/0005_auto_20160703_1523.py
0 → 100644
View file @
30536f6a
# -*- 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'
),
),
]
machines/migrations/0006_auto_20160703_1813.py
0 → 100644
View file @
30536f6a
# -*- 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
),
),
]
machines/migrations/0007_auto_20160703_1816.py
0 → 100644
View file @
30536f6a
# -*- 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'
),
),
]
machines/migrations/0008_remove_interface_ipv6.py
0 → 100644
View file @
30536f6a
# -*- 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'
,
),
]
machines/migrations/0009_auto_20160703_2358.py
0 → 100644
View file @
30536f6a
# -*- 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
),
),
]
machines/models.py
View file @
30536f6a
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
s
elf
.
type
return
s
tr
(
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'
]
machines/templates/machines/aff_machines.html
0 → 100644
View file @
30536f6a
<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>
machines/templates/machines/index.html
0 → 100644
View file @
30536f6a
{% 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 %}
machines/templates/machines/machine.html
0 → 100644
View file @
30536f6a
{% 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 %}
machines/templates/machines/sidebar.html
0 → 100644
View file @
30536f6a
{% extends "base.html" %}
{% block sidebar %}
<p><a
href=
"{% url "
search:search
"
%}"
>
Nouvelle machine
</a></p>
{% endblock %}
machines/urls.py
0 → 100644
View file @
30536f6a
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'
),
]
machines/views.py
View file @
30536f6a
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
})
re2o/urls.py
View file @
30536f6a
...
...
@@ -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')),
]
search/templates/search/index.html
View file @
30536f6a
...
...
@@ -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>
...
...
search/views.py
View file @
30536f6a
...
...
@@ -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
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment