Browse Source

удалил ip_pool

devel
Dmitry 9 years ago
parent
commit
863008381e
  1. 1
      ip_pool/__init__.py
  2. 6
      ip_pool/admin.py
  3. 6
      ip_pool/apps.py
  4. 22
      ip_pool/forms.py
  5. 23
      ip_pool/migrations/0001_initial.py
  6. 0
      ip_pool/migrations/__init__.py
  7. 59
      ip_pool/models.py
  8. 48
      ip_pool/templates/ip_pool/add_pool.html
  9. 73
      ip_pool/templates/ip_pool/index.html
  10. 59
      ip_pool/templates/ip_pool/ips.html
  11. 15
      ip_pool/urls.py
  12. 81
      ip_pool/views.py

1
ip_pool/__init__.py

@ -1 +0,0 @@
default_app_config = 'ip_pool.apps.IpPoolConfig'

6
ip_pool/admin.py

@ -1,6 +0,0 @@
from django.contrib import admin
from . import models
admin.site.register(models.IpPoolItem)

6
ip_pool/apps.py

@ -1,6 +0,0 @@
from django.apps import AppConfig
class IpPoolConfig(AppConfig):
name = 'ip_pool'
verbose_name = "Ip pool"

22
ip_pool/forms.py

@ -1,22 +0,0 @@
# -*- coding: utf-8 -*-
from django import forms
from mydefs import ip_addr_regex
class PoolForm(forms.Form):
start_ip = forms.GenericIPAddressField(protocol='ipv4', widget=forms.TextInput(attrs={
'pattern': ip_addr_regex,
'placeholder': '127.0.0.1',
'id': 'start_ip',
'class': 'form-control',
'required': ''
}), required=True)
end_ip = forms.GenericIPAddressField(protocol='ipv4', widget=forms.TextInput(attrs={
'pattern': ip_addr_regex,
'placeholder': '127.0.0.1',
'id': 'end_ip',
'class': 'form-control',
'required': ''
}), required=True)

23
ip_pool/migrations/0001_initial.py

@ -1,23 +0,0 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2016-06-28 23:51
from django.db import migrations, models
import mydefs
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='IpPoolItem',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('ip', mydefs.MyGenericIPAddressField(max_length=8, protocol='ipv4')),
],
),
]

0
ip_pool/migrations/__init__.py

59
ip_pool/models.py

@ -1,59 +0,0 @@
from django.db import models, connection
from mydefs import ip2int, MyGenericIPAddressField
class IpPoolItemManager(models.Manager):
def get_pools(self):
ips = self.raw(r'SELECT id, ip FROM ip_pool_ippoolitem ORDER BY id')
ips_len = len(list(ips))
if ips_len < 1:
return
last_dg = ip2int(ips[0].ip)
start_pool = last_dg
res = list()
cnt = 0
for ip in ips:
ipnt = ip2int(ip.ip)
if ipnt > last_dg + 1 or ipnt < last_dg - 1:
res.append((start_pool, last_dg, cnt))
start_pool = ipnt
cnt = 0
last_dg = ipnt
cnt += 1
res.append((start_pool, last_dg, cnt))
return res
def add_pool(self, start_ip, end_ip):
start_ip = ip2int(start_ip)
end_ip = ip2int(end_ip)
if (end_ip - start_ip) > 5000:
raise Exception('Not add over 5000 ip\'s')
sql_strs = [r"(%d)" % tip for tip in range(start_ip, end_ip + 1)]
sql = r'INSERT INTO ip_pool_ippoolitem (ip) VALUES %s' % r",".join(sql_strs)
cursor = connection.cursor()
cursor.execute(sql)
def get_free_ip(self):
sql = r'SELECT ip_pool_ippoolitem.id as id, ip_pool_ippoolitem.ip as ip FROM ip_pool_ippoolitem ' \
r'LEFT JOIN abonent ON abonent.ip_address_id = ip_pool_ippoolitem.id WHERE ' \
r'abonent.ip_address_id IS NULL LIMIT 1'
rs = self.raw(sql)
rs_len = len(list(rs))
return None if rs_len is 0 else rs[0]
class IpPoolItem(models.Model):
ip = MyGenericIPAddressField()
objects = IpPoolItemManager()
def int_ip(self):
return ip2int(self.ip)
def __str__(self):
return self.ip

48
ip_pool/templates/ip_pool/add_pool.html

@ -1,48 +0,0 @@
{% extends 'base.html' %}
{% block main %}
<ol class="breadcrumb">
<li><span class="glyphicon glyphicon-home"></span></li>
<li><a href="{% url 'ip_pool:home' %}">IP Пул</a></li>
<li class="active">Добавить</li>
</ol>
{% include 'message_block.html' %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Добавить IP пул</h3>
</div>
<div class="panel-body">
<form role="form" action="{% url 'ip_pool:add' %}" method="post">{% csrf_token %}
<div class="form-group">
<label for="start_ip">Начальный ip</label>
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-cutlery"></span></span>
{{ form.start_ip }}{{ form.start_ip.errors }}
</div>
</div>
<div class="form-group">
<label for="">Конечный ip</label>
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-gbp"></span></span>
{{ form.end_ip }}{{ form.end_ip.errors }}
</div>
</div>
<div class="btn-group">
<button type="submit" class="btn btn-sm btn-primary">
<span class="glyphicon glyphicon-save"></span> Сохранить
</button>
<button type="reset" class="btn btn-sm btn-default">
<span class="glyphicon glyphicon-remove-circle"></span> Сбросить
</button>
</div>
</form>
</div>
</div>
{% endblock %}

73
ip_pool/templates/ip_pool/index.html

@ -1,73 +0,0 @@
{% extends 'base.html' %}
{% block main %}
<ol class="breadcrumb">
<li><span class="glyphicon glyphicon-home"></span></li>
<li class="active">IP Пул</li>
</ol>
{% include 'message_block.html' %}
<h3>Пулы ip адресов</h3>
<div class="table-responsive">
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>Начальный IP</th>
<th>Конечный IP</th>
<th>Количество</th>
<th width="50">Ред.</th>
<th width="50">Уд.</th>
</tr>
</thead>
<tbody>
{% for pl in pools %}
<tr>
<td>{{ pl.0 }}</td>
<td>{{ pl.1 }}</td>
<td>{{ pl.2 }}</td>
<td colspan="2" class="btn-group btn-group-sm btn-group-justified">
<a href="{% url 'ip_pool:ips' %}?ips={{ pl.0 }}&ipe={{ pl.1 }}"
class="btn btn-primary">
<span class="glyphicon glyphicon-edit"></span>
</a>
{% if perms.ip_pool.delete_ippoolitem %}
<a href="{% url 'ip_pool:ips_del' %}?ips={{ pl.0 }}&ipe={{ pl.1 }}" class="btn btn-danger">
<span class="glyphicon glyphicon-remove-circle"></span>
</a>
{% endif %}
</td>
</tr>
{% empty %}
<tr>
<td colspan="5">Нет ни одного пула зарезервированных ip адресов.
{% if perms.ip_pool.add_ippoolitem %}
<a href="{% url 'ip_pool:add' %}">Создать</a>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
{% if perms.ip_pool.add_ippoolitem %}
<tfoot>
<tr>
<td colspan="5">
<a href="{% url 'ip_pool:add' %}" class="btn btn-sm btn-success">
<span class="glyphicon glyphicon-plus"></span>
</a>
</td>
</tr>
</tfoot>
{% endif %}
</table>
</div>
{% include 'toolbar_page.html' with pag=pools %}
{% endblock %}

59
ip_pool/templates/ip_pool/ips.html

@ -1,59 +0,0 @@
{% extends 'base.html' %}
{% block main %}
<ol class="breadcrumb">
<li><span class="glyphicon glyphicon-home"></span></li>
<li><a href="{% url 'ip_pool:home' %}">IP Пул</a></li>
<li class="active">Редактировать/Просмотреть</li>
</ol>
<h3>История абонента</h3>
<div class="table-responsive">
<table class="table table-striped table-bordered">
<thead>
<tr>
<th width="30">Id</th>
<th>Ip</th>
<th>Клиент</th>
<th width="50">Уд.</th>
</tr>
</thead>
<tbody>
{% for pi in pool_ips %}
<tr>
<td>{{ pi.id }}</td>
<td>{{ pi.ip }}</td>
<td>{% if pi.abon %}
<a href="{% url 'abonapp:abon_home' pi.abon.group.id pi.abon.id %}">{{ pi.abon.username }}</a>
{% else %}---{% endif %}
</td>
<td>
{% if pi.abon %}
<button class="btn btn-sm btn-danger disabled">
<span class="glyphicon glyphicon-remove-circle"></span>
</button>
{% elif perms.ip_pool.delete_ippoolitem %}
<a href="{% url 'ip_pool:del_ip' %}?id={{ pi.id }}" class="btn btn-sm btn-danger">
<span class="glyphicon glyphicon-remove-circle"></span>
</a>
{% endif %}
</td>
</tr>
{% empty %}
<tr>
<td colspan="4">Нет ни одного пула зарезервированных ip адресов.
{% if perms.ip_pool.add_ippoolitem %}
<a href="{% url 'ip_pool:add' %}">Создать</a>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% include 'toolbar_page.html' with pag=pool_ips %}
{% endblock %}

15
ip_pool/urls.py

@ -1,15 +0,0 @@
# -*- coding:utf-8 -*-
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^range$', views.ips, name='ips'),
url(r'^del$', views.del_pool, name='ips_del'),
url(r'^add$', views.add_pool, name='add'),
url(r'^delip$', views.delip, name='del_ip')
]

81
ip_pool/views.py

@ -1,81 +0,0 @@
# -*- coding: utf-8 -*-
from django.contrib.auth.decorators import login_required, permission_required
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib import messages
from .forms import PoolForm
from .models import IpPoolItem
import mydefs
@login_required
@mydefs.only_admins
def home(request):
pools = IpPoolItem.objects.get_pools()
if pools:
pools = [(mydefs.int2ip(ip[0]), mydefs.int2ip(ip[1]), ip[2]) for ip in pools]
pools = mydefs.pag_mn(request, pools)
return render(request, 'ip_pool/index.html', {
'pools': pools
})
@login_required
@mydefs.only_admins
def ips(request):
ip_start = request.GET.get('ips')
ip_end = request.GET.get('ipe')
pool_ips = IpPoolItem.objects.filter(ip__gte=ip_start)
pool_ips = pool_ips.filter(ip__lte=ip_end)
pool_ips = mydefs.pag_mn(request, pool_ips)
return render(request, 'ip_pool/ips.html', {
'pool_ips': pool_ips,
'ips': ip_start,
'ipe': ip_end
})
@login_required
@permission_required('ip_pool.delete_ippoolitem')
def del_pool(request):
ip_start = request.GET.get('ips')
ip_end = request.GET.get('ipe')
pool_ips = IpPoolItem.objects.filter(ip__gte=ip_start)
pool_ips = pool_ips.filter(ip__lte=ip_end)
pool_ips = pool_ips.filter()
pool_ips.delete()
return mydefs.res_success(request, 'ip_pool:home')
@login_required
@permission_required('ip_pool.add_ippoolitem')
def add_pool(request):
if request.method == 'POST':
frm = PoolForm(request.POST)
if frm.is_valid():
cd = frm.cleaned_data
IpPoolItem.objects.add_pool(cd['start_ip'], cd['end_ip'])
return redirect('ip_pool:home')
else:
messages.error(request, 'Исправьте ошибки')
else:
frm = PoolForm()
return render(request, 'ip_pool/add_pool.html', {
'form': frm
})
@login_required
@permission_required('ip_pool.delete_ippoolitem')
def delip(request):
ipid = request.GET.get('id')
get_object_or_404(IpPoolItem, id=ipid).delete()
return mydefs.res_success(request, 'ip_pool:home')
Loading…
Cancel
Save