Open Source im professionellen Einsatz
Linux-Magazin 03/2015
692

Webinterface

Listing 10 zeigt das HTML-Dokument der Beispielanwendung. Sein Kopf bindet in das verwendete CSS3-Stylesheet die Javascript-Bibliothek Jquery und Javascript-Code zur Reportgenerierung. Die Auswahlliste erzeugen die Zeilen 12 bis 16. Die »value« -Attribute der »option« -Elemente speichern die jeweiligen URLs der Python-Reports. Zeile 12 erzeugt den Submit-Button. Das »div« -Element, das die »id="output"« enthält, gibt die Ergebnisse aus.

Listing 10

www/index.html

01 <!DOCTYPE html>
02 <html>
03 <head>
04  <meta charset="UTF-8"/>
05  <link href="css/styles.css" rel="stylesheet"></link>
06  <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
07  <script src="js/app.js"></script>
08 </head>
09 <body class="centered">
10  <div class="container">
11   <form>
12   <select id="report">
13    <option value="bahntypen.py">Verteilung der Bahntypen</option>
14    <option value="keppler3.py">3. Keplersches Gesetz</option>
15    <option value="eccdistr.py">Verteilung der Bahnexzentrität</option>
16   </select>
17   <input type="submit" value="Senden"/>
18   </form>
19  </div>
20  <div id="output" class="container"><p>Bitte wählen</p></div>
21 </body>
22 </html>

Listing 11 zeigt schließlich den Javascript-Code, den der Jquery-Ausdruck in Zeile 6 von Listing 10 einbindet. Er initialisiert den Javascript-Code der Zeilen 2 bis 17, nachdem der Browser die Webseite aus Listing 10 vollständig geladen hat. Die Rückruffunktion in den Zeilen 2 bis 8 wird beim Versenden des Formulars in Listing 10 aktiviert. In ihrem Rumpf unterbricht die Methode »preventDefault()« zunächst den Versendeprozess, bevor die folgende Zeile über die Funktion »image()« ein Loader-Bild in den Ausgabebereich schreibt.

Listing 11

www/js/app.js

01 $(document).ready(function() {
02  $('form').submit(function(e) {
03   e.preventDefault();
04   image("/img/ajax-loader.gif");
05   $.getJSON($('#report').val(), function(data) {
06    image(data.fileref);
07   }).fail(function(e) {out($('<p>').text("Error: " + e.status + " - " + e.statusText))});
08  });
09
10  function image(url) {
11   out($("<img>").attr("src", url+"?"+(Date.now())));
12  }
13
14  function out(obj) {
15   $('#output').empty().append(obj);
16  }
17 });

Ab Zeile 5 startet Jquery mittels »getJSON()« einen Report auf dem Webserver. Dabei sendet »getJSON()« eine asynchrone HTTP-Anfrage an den Webserver und erwartet ein Dokument im Json-Format als Antwort. Die URL der HTTP-Anfrage liest Jquery mittels »$('#report').val()« aus dem »value« -Attribut des aktuell ausgewählten Punktes der Auswahlliste, die in Listing 10 steckt. Im Erfolgsfall verwandelt das Skript das Json-Objekt aus der HTTP-Antwort in ein Javascript-Objekt und übergibt es in der Variablen »data« an die Rückruffunktion (Zeilen 5 bis 7).

Zeile 6 lädt die Ergebnisgrafik mit Hilfe der Funktion »image()« vom Webserver im Browser nach. Die URL liest Jquery aus der Komponente »data.fileref« . Im Fehlerfall gibt Zeile 7 anstelle der Grafik eine Fehlermeldung im Browser aus. Dazu nutzt sie, wie auch der übrige Code, die Funktion »out()« (Zeilen 14 bis 16).

R-Folge

Mit der R-Schnittstelle Rpy2 lassen sich anspruchsvolle statistische Rechnungen unter R mittels Python ins Web bringen. Dabei versucht Rpy2 die Statistiksoftware R möglichst sprachgetreu unter Python zu emulieren. Das kann jedoch nur bedingt gelingen, zudem verlängert der eingebettete R-Prozess die Antwortzeit der Python-Skripte.

Der Entwickler sollte daher erwägen Alternativen einzusetzen: Zwar bettet das Apache-Modul »rApache« [8] den R-Prozess performant in den Webserver ein, jedoch wälzt es die Anwendungslogik vollständig auf R ab. Das Python-Modul Pandas [9] erfreut sich zwar wachsender Beliebtheit, emuliert bisher aber nur eine Teilmenge von R.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 7 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Web-Beschleunigung

    Nach der Ajax-Revolution im Browser steht eine Modernisierung der Server-Seite an. Auch dort sollen asynchrone Requests zu schnelleren und besser skalierenden Webanwendungen führen. Der Jetty-Server hat dazu Continuations implementiert, Cometd bietet einen Standard.

  • Python

    Einsteigerfreundlich, schnell zu lernen und flexibel: Die Skriptsprache Python genießt trotz des vermeintlich gefährlichen Namens einen guten Ruf. Dank zahlreicher Module und einfacher Syntax reichen für Datei-Operationen, Ein- und Ausgaben und selbst fürs Monitoring eines Servers wenige Zeilen Code.

  • Online-Seminare zu MongoDB kostenlos

    Die Firma 10gen bietet drei kostenlose Online-Videokurse für die NoSQL-Datenbank MongoDB an, von denen der erste am Montag startet.

  • React

    Vom Unternehmen Facebook kommt das quelloffene Javascript-Framework React, das Weboberflächen geschickt mit Datenschätzen verknüpft. Insbesondere die Renderfunktion macht sich dabei nützlich.

  • Mongo DB

    Mongo DB ist ein Musterexemplar unter den NoSQL-Datenbanken: Die Open-Source-Software hat zeitgemäße Features wie Replikation, Failover und Sharding bereits eingebaut. Der Autor setzt die Datenbank schon seit 2009 produktiv ein und breitet seinen Erfahrungsschatz aus.

comments powered by Disqus

Ausgabe 07/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.