Python för Webb

I mitt projekt med GeoRover så behöver jag koppla ihop ett webbinterface med python, så att användaren kan anropa olika skript från gränssnittet och även se resultat från dessa.

I detta inlägg kikar jag lite på Flask, som är ett ramverk för webbutveckling med Python.

Jag kommer så småningom att behöva installera ett ramverk fullständigt, men så länge följer jag rekommendationen att installera i en virtuell miljö:

sudo apt-get install python-virtualenv
mkdir testprojekt
cd testprojekt
virtualenv venv
. venv/bin/activate

Ovanstående skapar en virtuell miljö där jag kan experimentera bäst jag vill, och när jag vill ”hoppa ur” denna miljö så skriver jag in kommandot: deactivate

Flask installeras i den virtuella miljön med ett pip-kommando:

sudo pip install Flask

Jag börjar med det obligatoriska ”Hello World”, genom att skapa en fil som jag döper till ”hello.py”, med följande innehåll:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
 return 'Hello World!'

Mycket kortfattat så kommer skriptet att lyssna efter en adress och om det är ‘/’, det vill säga roten på webbservern så svarar den med texten ‘Hello World!’.

Det går med andra ord att byta ut denna text mot en text som är en hel hemsida, eller välja att lyssna efter flera olika adresser för att ge olika texter som svar.

Skriptet skall exporteras till flask och sedan skall servern startas:

export FLASK_APP=hello.py
flask run --host=0.0.0.0

Tillägget med –host=0.0.0.0 behövs om man vill komma åt servern från en annan dator än den lokala, så om du provar på en egen dator så kan du strunta i detta, men om du som jag kör på en Raspberry Pi och vill komma åt den via nätverket och enhetens IP-adress så.

Skärmbild från 2017-06-19 10-28-11.png

För att få Flask att köra ett skript så kan man använda ”POST” (jag behövde även ”GET” i methods), vilket jag enkelt kan testa genom att modifiera pythonskriptet något. Importera ”request” från flask, samt mitt egentillverkade ”test”, som är ett enkelt pythonskript som bara returnerar en text när anropet till funktionen ”test()” utförs, men det skulle kunna vara hur avancerat som helst (fånga waypoint?).

När jag anger adressen ”/rover” i webbläsaren så får jag fram en knapp med texten ”Tryck”. När jag trycker på denna så körs mitt pythonskript och jag får ett svar som skrivs till skärmen.

Jag skulle kunna göra hela mitt gränssnitt på detta sätt. En lista med knappar som alltid skrivs till skärmen, och en funktion som fångar ”POST” från dessa och kör olika skript beroende på vilken knapp som tryckts ner. Då måste jag dock kunna skilja ut vilken knapp som tryckts ned.

Genom att namnge alla knappar till samma namn, exempelvis ”knapp”, så kan jag kontrollera med ett ”form” kommando vilket värde (value) som den nedtryckta knappen har, och därmed koppla knappar till olika händelser.

<input type="submit" name="knapp" value="Skapa WP">
if request.form['knapp'] == 'Skapa WP':
   gor_något()

Strålande!

Annonser

Taggar:, , ,

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s

%d bloggare gillar detta: