Flask Script erneut starten

Django, Flask, Bottle, WSGI, CGI…
Antworten
tz_wuerzburg
User
Beiträge: 38
Registriert: Dienstag 7. März 2017, 17:51

Dienstag 12. Juni 2018, 09:35

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?
Benutzeravatar
__blackjack__
User
Beiträge: 796
Registriert: Samstag 2. Juni 2018, 10:21

Dienstag 12. Juni 2018, 10:04

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>.
Zuletzt geändert von __blackjack__ am Dienstag 12. Juni 2018, 10:06, insgesamt 1-mal geändert.
Global warming is caused by the sun.
Benutzeravatar
noisefloor
User
Beiträge: 2423
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Dienstag 12. Juni 2018, 10:05

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
Benutzeravatar
__blackjack__
User
Beiträge: 796
Registriert: Samstag 2. Juni 2018, 10:21

Dienstag 12. Juni 2018, 10:15

@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. :-)
Global warming is caused by the sun.
Sirius3
User
Beiträge: 8108
Registriert: Sonntag 21. Oktober 2012, 17:20

Dienstag 12. Juni 2018, 14:18

@noisefloor: wenn kein actions-Attribut angegeben ist, nimmt HTML die aktuelle Seite.

</br> sind schließende Tags ohne öffnende.
tz_wuerzburg
User
Beiträge: 38
Registriert: Dienstag 7. März 2017, 17:51

Mittwoch 13. Juni 2018, 08:08

Vielen Dank für Eure Hinweise.
Ich habe im Modul die einzelnen Blöcke in Funktionen gewandelt und schon läuft es.
Antworten