Flask read Textfile and Display on html

Django, Flask, Bottle, WSGI, CGI…
Antworten
pUC19
User
Beiträge: 13
Registriert: Donnerstag 19. September 2019, 14:33

Hallo Leute,

derzeit programmiere ich ein bisschen mit Flask.
Dabei soll die Web App über ein Form action die gespeicherte Textdatei einlesen und in content wiedergeben.

Code: Alles auswählen

<div class="form-group">
  <form action="DEG" method="post">
 Sequence: <input class="form-control" name="seq" type="text" placeholder="AAAAA" /><br/>

 <input class="form-control" value="Degeneriert" type="submit" />
 <br>
 <pre>{{ content }}</pre>
 </form>
 </div> 

Python Flask Script.

Code: Alles auswählen

#===Calculation DEG Mass of DNA===
@app.route('/DEG', methods=['POST','GET'])
def DEG():
        if request.method == 'POST':
            try:
                seq = request.form['seq']
                fobj = open("DEG/sequenzeingabe.txt","w")
                seq = seq.upper()
                fobj.write(str(seq))
                fobj.close()
                import seqgenerator
                with open("DEG/autofilter1.txt","r") as f:      
                    content = f.read()
                    
            except:
                print("No request!")
            
            finally:
                
                return render_template("index.html",scrollToAnchor='contact',content=content)
                f.close()   

Das ganze funktioniert auch super. Beim ersten Mal :lol:
Sobald ich einen neue request Anfrage stell passiert nichts?! Kann mir da einer Helfen? Vielen Dank im Vorraus.
Mfg Tobi
Sirius3
User
Beiträge: 18220
Registriert: Sonntag 21. Oktober 2012, 17:20

Laß mich raten, seqgenerator macht was beim Importieren? Das geht nicht, weil Python sich alle importierten Module merkt. Was auch immer da drin passiert, das muß in eine Funktion, die Du aufrfust. Und daher gehören Importe auch immer an den Anfang der Datei.
Textdateien sollte man immer mit einem Encoding öffnen, am besten mit dem with-Statement.
Keine nakten excepts. Wenn man einen Fehler nicht sinnvoll verarbeiten kann, dann macht man gar keine Fehlerbehandlung (welcher Fehler sollte da auch auftreten?) Der Folgefehler (content nicht definiert) folgt nämlich gleich. `f` wird nirgends definiert. Kürze keine Namen ab, f, fobj, seq, was soll das alles bedueten?

Code: Alles auswählen

import sequenze_generator

@app.route('/DEG', methods=['POST','GET'])
def DEG():
    if request.method == 'POST':
        sequenze = request.form['seq']
         with open("DEG/sequenzeingabe.txt", "w", encoding="utf8") as output
            output.write(sequenze.upper())
        sequenze_generator.was_auch_immer()
        with open("DEG/autofilter1.txt","r", encoding="utf8") as input:      
            content = input.read()
        return render_template("index.html", scrollToAnchor='contact',content=content)
Dass da was über Dateien ein und ausgegeben wird ist seltsam. Dafür benutzt man doch Parameter.
Also besser:

Code: Alles auswählen

import sequenze_generator

@app.route('/DEG', methods=['POST','GET'])
def DEG():
    if request.method == 'POST':
        sequenze = request.form['seq']
        content = sequenze_generator.was_auch_immer(sequenze.upper())
        return render_template("index.html", scrollToAnchor='contact',content=content)
pUC19
User
Beiträge: 13
Registriert: Donnerstag 19. September 2019, 14:33

Super! 👍Vielen Dank für die schnelle Antwort. Ja das mit der Textdatei ist nicht gut gelöst. Wusste aber vorher nicht, wie ich aus anderen Scripten die Funktionen aufrufen kann. Nachhinein eigentlich logisch und peinlich. 😓 Das except Statement macht so keinen Sinn. Da stimme ich dir zu. Das werde ich dann noch verbessern.
Antworten