Seite 1 von 1

Flask Script erneut starten

Verfasst: Dienstag 12. Juni 2018, 09:35
von tz_wuerzburg
Hallo Leute,
folgender Python Code ist gegeben.

Code: Alles auswählen

@app.route("/sorting")
def sorting():

    weight = request.args.get("weight")
    bundle_min = request.args.get("bundle_min")
    bundle_max = request.args.get("bundle_max")

    if weight == "100":
        import programm
        v1 = "RICHTIG"
    else:
        v1 = "FALSCH"


    print (weight)
    return render_template("sorting.html", v1=v1)
Folgender HTML Code ist gegeben.

Code: Alles auswählen

{% extends "layouts/main.html" %}

{% block content %}

    <form method="get">
        <label for="weight">Gewicht(g):</label>
        <input type="text" name="weight" id="weight" />
        <label for="bundle_min">Bundminimum:</label>
        <input type="text" name="bundle_min" id="bundle_min" />
        <label for="bundle_max">Bundmaximum:</label>
        <input type="text" name="bundle_max" id="bundle_max" />
        </br>
        </br>
        <input type="submit" value="Optimierung starten" />

        {{ v1 }}

{% endblock %}
Wenn ich Flask neu starte und weight mit 100 übergebe läuft mein Code perfekt durch, bzw. wird er über den Browser
gestartet.
Möchte ich den Vorgang wiederholen klappt es aber nicht. D.h. ich muss den Webserver stopen und wieder starten.
Ich verstehe nur leider nicht warum das so ist. Könnt ihr mir helfen?

Re: Flask Script erneut starten

Verfasst: Dienstag 12. Juni 2018, 10:04
von __blackjack__
Kannst Du das ``import programm`` an den Modulanfang verschieben? Falls nicht, liegt es daran: Der Code in einem Modul wird nur einmal beim ersten Import ausgeführt. Danach gibt's da Modul ja schon. Auf Modulebene gehört deshalb auch kein Code der etwas anderes macht als Konstanten, Klassen, und Funktionen zu definieren. Pack den Code in Funktionen, importiere das Modul am Anfang und da wo jetzt Dein ``import`` steht, rufst Du dann die entsprechende Funktion aus dem Modul `programm` auf.

Edit: Beim HTML fehlt übrigens das schliessende Tag für <form>.

Re: Flask Script erneut starten

Verfasst: Dienstag 12. Juni 2018, 10:05
von noisefloor
Hallo,

wenn du mit Formularen arbeitest solltest du ein Fallunterscheidung machen, also ob der Request Daten enthält oder leer ist. Das macht man am einfachsten darüber, dass man das ausgefültte Formular als POST-Request schickt, dann kann du serverseitig darüber unterscheiden.

Im Template ist das <form> Tag nicht geschlossen und du gibst für das Formular keine `action` an.
HTML 5 kennt auch andere input-Typen als Text. Wenn du ein Gewicht in Gramm erwartest, dann kannst du `number` nehmen. Damit wird client-seitig schon mal verhindert, dass Buchstaben eingegeben werden.

Gruß, noisefloor

Re: Flask Script erneut starten

Verfasst: Dienstag 12. Juni 2018, 10:15
von __blackjack__
@noisefloor: Zum letzten Satz: Damit *kann* der Client verhindern das Buchstaben eingegeben werden, verlassen darf man ich auf Serverseite darauf aber nicht. Also nur das jetzt niemand denkt man kann sich Fehlerbehandlung beim Umwandeln in eine Zahl auf dem Server sparen. :-)

Re: Flask Script erneut starten

Verfasst: Dienstag 12. Juni 2018, 14:18
von Sirius3
@noisefloor: wenn kein actions-Attribut angegeben ist, nimmt HTML die aktuelle Seite.

</br> sind schließende Tags ohne öffnende.

Re: Flask Script erneut starten

Verfasst: Mittwoch 13. Juni 2018, 08:08
von tz_wuerzburg
Vielen Dank für Eure Hinweise.
Ich habe im Modul die einzelnen Blöcke in Funktionen gewandelt und schon läuft es.