diff --git a/apps/accounts/templates/login.html b/apps/accounts/templates/login.html index 9d443bd..98ca915 100644 --- a/apps/accounts/templates/login.html +++ b/apps/accounts/templates/login.html @@ -6,14 +6,16 @@ {% block content-suptitle %}Authetication{% endblock %} {% block content %} -
+
+ {% csrf_token %} {% bootstrap_form form %} {% buttons %} {% endbuttons %} - + +
{% endblock %} {% block messages%} diff --git a/apps/main/admin.py b/apps/main/admin.py index 8c38f3f..56b5660 100644 --- a/apps/main/admin.py +++ b/apps/main/admin.py @@ -1,3 +1,11 @@ from django.contrib import admin +from .models import Device, DeviceType, Experiment, ExperimentDetail, ExperimentTemplate, Configuration # Register your models here. + +admin.site.register(Experiment) +admin.site.register(ExperimentDetail) +admin.site.register(ExperimentTemplate) +admin.site.register(Device) +admin.site.register(Configuration) +admin.site.register(DeviceType) \ No newline at end of file diff --git a/apps/main/forms.py b/apps/main/forms.py new file mode 100644 index 0000000..d4adf43 --- /dev/null +++ b/apps/main/forms.py @@ -0,0 +1,21 @@ +from django import forms +from .models import Device, Experiment, ExperimentTemplate + +def add_empty_choice(choices, pos=0, label='-----'): + if len(choices)>0: + choices = list(choices) + choices.insert(0, (0, label)) + return choices + else: + return [(0, label)] + +class ExperimentForm(forms.ModelForm): + class Meta: + model = Experiment + fields = ['name', 'alias', 'start_date', 'end_date'] + + +class TemplatesForm(forms.Form): + template = forms.ChoiceField(choices=add_empty_choice(ExperimentTemplate.objects.all().values_list('id', 'experiment_detail__experiment__name')), + required=False) + \ No newline at end of file diff --git a/apps/main/models.py b/apps/main/models.py index 71a8362..febd7f0 100644 --- a/apps/main/models.py +++ b/apps/main/models.py @@ -1,3 +1,84 @@ from django.db import models +STATES = ( + (0, 'Inactive'), + (1, 'Active'), + ) + # Create your models here. + +class DeviceType(models.Model): + + name = models.CharField(max_length=40) + alias = models.CharField(max_length=40) + info = models.TextField(blank=True, null=True) + status = models.PositiveSmallIntegerField(default=1, choices=STATES) + + class Meta: + db_table = 'device_types' + + def __unicode__(self): + return u'%s' % self.alias + +class Device(models.Model): + + device_type = models.ForeignKey(DeviceType) + model = models.CharField(max_length=40, default='') + serial = models.CharField(max_length=40, default='') + ip_address = models.GenericIPAddressField(protocol='IPv4', default='0.0.0.0') + status = models.PositiveSmallIntegerField(default=1, choices=STATES) + + class Meta: + db_table = 'devices' + + def __unicode__(self): + return u'%s-%s' % (self.device_type, self.ip_address) + +class Experiment(models.Model): + + name = models.CharField(max_length=40) + alias = models.CharField(max_length=40) + start_date = models.DateTimeField() + end_date = models.DateTimeField() + status = models.PositiveSmallIntegerField(default=1, choices=STATES) + + class Meta: + db_table = 'experiments' + + def __unicode__(self): + return u'%s: %s-%s' % (self.name, self.start_date, self.end_date) + +class Configuration(models.Model): + + device = models.ForeignKey(Device) + parameters = models.TextField() + status = models.PositiveSmallIntegerField(default=1, choices=STATES) + + def __unicode__(self): + return u'%s Conf' % self.device + class Meta: + db_table = 'configurations' + +class ExperimentDetail(models.Model): + + experiment = models.ForeignKey(Experiment) + configurations = models.ManyToManyField(Configuration) + status = models.PositiveSmallIntegerField(default=1, choices=STATES) + + class Meta: + db_table = 'experiments_detail' + + def __unicode__(self): + return u'%s Configuration' % self.experiment.name + +class ExperimentTemplate(models.Model): + + experiment_detail = models.ForeignKey(ExperimentDetail) + status = models.PositiveSmallIntegerField(default=1, choices=STATES) + + class Meta: + db_table = 'templates' + + def __unicode__(self): + return u'%s Template' % (self.experiment_detail.experiment.name) + \ No newline at end of file diff --git a/apps/main/templates/base.html b/apps/main/templates/base.html index 38178e8..b3c840b 100644 --- a/apps/main/templates/base.html +++ b/apps/main/templates/base.html @@ -1,6 +1,4 @@ -{% load bootstrap3 %} -{% load url from future %} {% load static %} @@ -13,7 +11,7 @@ @@ -97,7 +108,7 @@ {# bootstrap_javascript jquery=True #} -{% block js_extra %} +{% block extra-js %} {% endblock%} diff --git a/apps/main/templates/index.html b/apps/main/templates/index.html index 351cde6..c013d0d 100644 --- a/apps/main/templates/index.html +++ b/apps/main/templates/index.html @@ -1,14 +1,59 @@ {% extends "base.html" %} -{% block mainactive %}active{% endblock %} - -{% block content-title %}TITLE{% endblock %} -{% block content-suptitle %}Suptitle{% endblock %} +{% load bootstrap3 %} +{% block exp-active %}active{% endblock %} +{% block content-title %}Experiments{% endblock %} +{% block content-suptitle %}{% endblock %} {% block content %} -

- {% lorem %} -

+
+ {% bootstrap_form form size='medium' %} +
+
+
+ + + + + + + +{% for device in devices %} + + + + + + +{% endfor %} +
DeviceIP AdressModelStatus
{{device.device_type.name}}{{device.ip_address}}{{device.model}}{{device.status}}
+
+
+ {% endblock %} {% block sidebar%} + {% if devices %} +
+
+

Devices

+
+ {% block sidebar-content %} +
+ {% for device in devices %} + {{device.device_type.name}} + {% endfor %} +
+ {% endblock %} +
+ {% endif %} {% endblock %} + +{% block extra-js%} + +{% endblock %} \ No newline at end of file diff --git a/apps/main/templates/new_experiment.html b/apps/main/templates/new_experiment.html new file mode 100644 index 0000000..2046e49 --- /dev/null +++ b/apps/main/templates/new_experiment.html @@ -0,0 +1,22 @@ +{% extends "base.html" %} +{% load bootstrap3 %} +{% block exp-active %}active{% endblock %} + +{% block content-title %}Experiments{% endblock %} +{% block content-suptitle %}New{% endblock %} + +{% block content %} +
+
+ {% csrf_token %} + {% bootstrap_form form layout='horizontal' size='medium' %} +
+
+ +
+
+ +{% endblock %} + +{% block sidebar%} +{% endblock %} diff --git a/apps/main/urls.py b/apps/main/urls.py index 52a7471..f97c92f 100644 --- a/apps/main/urls.py +++ b/apps/main/urls.py @@ -1,5 +1,7 @@ -from django.conf.urls import patterns, url +from django.conf.urls import url -urlpatterns = patterns('apps.main.views', - url(r'^$', 'index', name="index"), +urlpatterns = ( + url(r'^new/experiment/$', 'apps.main.views.new_experiment', name='new_experiment'), + url(r'^new/device/$', 'apps.main.views.new_device', name='new_device'), + url(r'^experiment/(?P-?\d+)/$', 'apps.main.views.index', name='template'), ) diff --git a/apps/main/views.py b/apps/main/views.py index 4e143c2..0408dc5 100644 --- a/apps/main/views.py +++ b/apps/main/views.py @@ -1,8 +1,35 @@ from django.shortcuts import render,render_to_response from django.template import RequestContext +from .forms import ExperimentForm, TemplatesForm +from .models import ExperimentTemplate, Device # Create your views here. -def index(request): +def index(request, idtemplate=0): kwargs = {} + if idtemplate not in (0, "0"): + form = TemplatesForm(initial={'template':idtemplate}) + template = ExperimentTemplate.objects.get(id=idtemplate) + devices = Device.objects.filter(configuration__experimentdetail__experiment=template.experiment_detail.experiment) + kwargs['devices'] = devices + else: + form = TemplatesForm() + kwargs['form'] = form return render_to_response("index.html", kwargs, context_instance=RequestContext(request)) + +def new_experiment(request): + kwargs = {} + if request.method == 'POST': + form = ExperimentForm(request.POST) + if form.is_valid(): + form.save() + return render_to_response("index.html", kwargs, context_instance=RequestContext(request)) + else: + form = ExperimentForm() + kwargs['form'] = form + return render_to_response("new_experiment.html", kwargs, context_instance=RequestContext(request)) + +def new_device(request): + kwargs = {} + + return render_to_response("new_device.html", kwargs, context_instance=RequestContext(request)) \ No newline at end of file diff --git a/radarsys/settings.py b/radarsys/settings.py index 3483dba..deff707 100644 --- a/radarsys/settings.py +++ b/radarsys/settings.py @@ -118,4 +118,4 @@ STATICFILES_DIRS = ( STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', -) \ No newline at end of file +) diff --git a/radarsys/urls.py b/radarsys/urls.py index e8d69f3..9e66927 100644 --- a/radarsys/urls.py +++ b/radarsys/urls.py @@ -17,8 +17,9 @@ from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ + url(r'^$', 'apps.main.views.index', name='index'), url(r'^admin/', include(admin.site.urls)), - url(r'^$', include('apps.main.urls')), + url(r'^main/', include('apps.main.urls')), url(r'^accounts/', include('apps.accounts.urls')), url(r'^rc/', include('apps.rc.urls')), url(r'^dds/', include('apps.dds.urls')),