Flask

Flask #

Flask är ett webbramverk för Python. Det går alltså att skapa hemsidor/webbapplikationer i Flask.

Installera Flask #

Flask går att installera med hjälp av pip.

pip3 install flask

En enkel applikation #

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "Hello World!"

if __name__ == "__main__":
    app.run(host="0.0.0.0")

Om du kör applikationen kommer en webbserver att startas på din dator på port 5000. Du kan nå webbapplikation genom att gå in på http://localhost:5000.

Returnera JSON-data #

Att returnera svar i JSON är enkelt med Flask. Först behöver du importera jsonify från Flask.

from flask import Flask, jsonify

I dina applikationroutes kan du nu returnera JSON data.

@app.route("/test")
def test():
    return jsonify({
        "car": "Alfa Romeo",
        "numbers": [1, 2, 3],
        "person": {
            "age": 17,
            "city": "Stockholm"
        }
    })

JSON-datan behöver alltså wrappas med en jsonify() runt sig (JSON-data du vill returnera lägger du mellan paranteserna). Detta är perfekt för att skriva backendapplikationer.

Dela upp Flask routes i olika filer med hjälp av blueprints #

Om du kodar en större webbapplikation i Flask kan det vara bra att dela upp applikationen i olika filer. Detta går att göra i Flask med hjälp av blueprints.

Om du utgår från startapplikationen ovan kan du importera blueprints från andra filer.

from client import client_routes

app.register_blueprint(client_routes)

Filen client.py kan innehålla routes som är helt separerade med resten av applikationen.

from flask import Blueprint

# blueprint init
client_routes = Blueprint(
    "client_routes",
    __name__,
    template_folder="../templates"
)

# routes
@client_routes.route("/client")
def client():
    return "Detta kommer från client_routes!`

Rendera HTML #

Flask kan rendera HTML-filer med Python data.

from flask import render_template

version = "v1.0"

@app.route("/demo")
def demo():
    return render_template("index.html", version=version)

Alla HTML filer måste finnas i templates mappen (som standard).

Genom att definera variabler som argument till render_template funktionen kommer dessa att vara tillgängliga från HTML-filen, se exemplet nedan (templates/index.html). Det går att skicka in variabler, listor och dictionaries.

<!DOCTYPE html>
<html>
    <head>
        <title>Demo</title>
    </head>
    <body>
        <p>{{ version }}</p>
    </body>
</html>

För att använda variabler används {{ variablens_namn }}. Det går också att göra for-loopar eller if-statements.

{% if error %}
<p>Detta visas endast om "error" variablen är definierad (alltså inte None).</p>
{% endif %}
{% for user in users %}
<p>Användare {{ user }}</p>
{% endfor %}
Senast modifierad av Vilhelm Prytz (1db913e)
Lägg till HTMl-guide till Flask