2016-07-19 17 views
0

ich an der DB zu verbinden versuchen, und einige Daten auf der Webseite zeigen, unten ist, was ich versuchte:Ausgabe in HTML Redirect-Kolben mit

import jaydebeapi 
import jpype 
import sys 
from flask import Flask 
from flask import request, render_template 
app = Flask(__name__) 

@app.route('/') 
def my_form(): 
    return render_template('Name.html') 

@app.route('/', methods=['POST']) 
def teradataconn(): 
    classpath="/export/home/tdgssconfig.jar:/export/home/terajdbc4.jar" 
    Name = request.form['Name'] 
    query="select top 1 Col1, Col2, Col3 from TABLE where Col2='Name' and Col3 is null order by Col1 desc" 
    jvm_path=jpype.getDefaultJVMPath() 
    jpype.startJVM(jpype.getDefaultJVMPath(), "-Djava.class.path=%s" % classpath) 
    conn=jaydebeapi.connect('com.teradata.jdbc.TeraDriver', 'jdbc:teradata://HostName/DATABASE=DBNAME,USER=USER_NAME,PASSWORD=PassWord') 
    cursor=conn.cursor() 
    cursor.execute(query) 
    rows=cursor.fetchall() 
    conn.close() 
    return render_template('output.html',rows=rows) 

if __name__ == '__main__': 
    app.run 

Im Folgenden wird die Seite (Name.html) Namen eingeben die gegen DB verarbeitet werden.

<!DOCTYPE html> 
<html lang="en"> 
<body> 
    <h1>Enter JC Name</h1> 
    <form action="." method="POST"> 
     <input type="text" name="Name"> 
     <input type="submit"> 
    </form> 
</body> 
</html> 

Nachfolgend finden Sie zur Anzeige Ausgang (Output.html):

<!DOCTYPE html> 
<html lang="en"> 
<body> 
    <p>{{ rows }}<p> 
</body> 
</html> 

Nachdem ich den Namen auf der ersten Seite eingeben, i unten Ausganges. Bitte schlagen Sie vor, was getan werden muss, um es zu beheben.

Bad Request 

The browser (or proxy) sent a request that this server could not understand. 

I unter Leitung entfernt und den Wert fest einprogrammiert und ich war das Ergebnis bekommen, so scheint es, Wert nicht übergeben zu werden, irgendwelche Vorschläge bitte.

Name = request.form['Name'] 
+0

Ich glaube nicht, dass Sie zwei Routen die gleiche haben können wie das .... –

+0

@JoranBeasley Ich möchte Ausgabe auf HTML zeigen, wie kann ich das erreichen? – ankitpandey

+0

Bevor Sie versuchen, auf 'request.form ['Name']' 'zuzugreifen, versuchen Sie 'request.form' zu drucken. Lassen Sie uns wissen, was in der Konsole oder Fehlerprotokolle angezeigt wird. –

Antwort

0

Basierend auf der Ausgabe von print request.form, ist Ihr Problem nicht in Glaskolben, sondern in der Form vor. Flask empfängt ein Formular mit Schlüssel/Wert-Paaren: text:someName und my-form:Send.

(Flask einen 400 Bad Request Fehler zurück, wenn Sie eine Eigenschaft request.form zuzugreifen versuchen, die es nicht gibt,. see docs In diesem Fall Sie den Zugriff attemting die Eigenschaft Name.)

Das zweite Paar ergibt sich aus der Tatsache, dass Sie name und value Attribute zu Ihrem submit Eingang gegeben haben. Das ist nicht nötig! Sie können dieses Element einfach deklarieren: <input type="submit">.

Wie für die ersten <input>, ist es seltsam, dass es das type Attribut anstelle des name Attributs als Schlüssel sendet. Ich kann das Problem nicht erneut erstellen. Stellen Sie sicher, dass Ihr Element in Ihrem HTML-Code wirklich als <input type="text" name="Name"> und nicht als <input type="text" name="text"> deklariert ist.

+0

Ich habe die HTML-Datei aktualisiert, wie gefragt, aber immer noch bekomme ich dieselbe Bad Request Nachricht, unten ist die Nachricht auf der Konsole. 'IP-Adresse - - [21/Jul/2016 00:18:59]" GET/HTTP/1.1 "200 - UnveränderlichMultiDict ([(Name ',' Name, den ich auf WebPage 'weitergegeben')]) IP-Adresse - - [21/Jul/2016 00:19:01] "POST/HTTP/1.1" 400-'Ich habe meine Frage mit dem HTML, das ich gerade benutze, aktualisiert. – ankitpandey

+0

@ankitpandey Und Sie sind sicher, dass, wenn Sie die Zeile 'Name = request.form ['Name']' mit 'Name = 'someName' ersetzen, der Fehler verschwindet? –

+0

Es funktioniert jetzt, es gab auch ein anderes Problem, das jetzt behoben ist, vielen Dank für Ihre Hilfe @ this-vidor – ankitpandey

-1
@app.route('/', methods = ['GET','POST']) 
def my_form(): 
    if request.method='GET': 
     return render_template('Name.html') 
    if request.method='POST': 
     classpath="/export/home/tdgssconfig.jar:/export/home/terajdbc4.jar" 
     Name = request.form['Name'] 
     query="select top 1 Col1, Col2, Col3 from TABLE where Col2='Name' and Col3 is null order by Col1 desc" 
     jvm_path=jpype.getDefaultJVMPath() 
     jpype.startJVM(jpype.getDefaultJVMPath(), "-Djava.class.path=%s" % classpath) 
     conn=jaydebeapi.connect('com.teradata.jdbc.TeraDriver', 'jdbc:teradata://HostName/DATABASE=DBNAME,USER=USER_NAME,PASSWORD=PassWord') 
     cursor=conn.cursor() 
     cursor.execute(query) 
     rows=cursor.fetchall() 
     conn.close() 
     return render_template('output.html',rows=rows) 
+0

Ich habe es versucht, aber es funktioniert auch nicht. Ich bekomme denselben Fehler. – ankitpandey

+0

Downvote: Da diese Lösung keine Kommentare oder Erklärungen enthält, habe ich keine Ahnung, warum Sie glauben, dass diese Neuorganisation des 'GET' Request-Handlers einen' Bad Request' Fehler beheben würde, der durch 'POST' Anfragen ausgelöst wird. –

+0

@ This-Vidor Entschuldigung, ich hatte Text auch vorher hinzugefügt, aber es wurde wahrscheinlich gelöscht, als ich den Code eingefügt habe. –