2016-05-02 8 views
0

Ich habe mit Word2vec und Gensim als seine Python-Implementierung experimentiert. Jetzt muss ich mein Modell auf einer Website zugänglich machen - also brauche ich Flask. I definiert ein Formular in forms.py wie folgt aus:Daten von wtforms

from wtforms Import Form, StringField, SubmitField, validators 
class msForm(Form): 
    ms_1 = StringField(label='Eingabe_1', default = 'king', validators=[validators.input_required()]) 
    ms_2 = StringField(label='Eingabe_2', default = 'man', validators=[validators.input_required()]) 
    ms_3 = StringField(label='Eingabe_3', default = 'queen', validators=[validators.input_required()]) 
    submit=SubmitField() 

jetzt meine views.py wie folgt aussieht:

from app import app 
from .forms import msForm 
from flask import render_template, flash, request 
from gensim.models import word2vec 

global model 
model = word2vec.Word2Vec.load_word2vec_format('./app/static/GoT.model.vector', binary=True) 
global form 
form = msForm() 

@app.route('/') 
def index(): 
return render_template('my-form.html', form=form) 

@app.route('/', methods=['POST']) 
def msForm_post(): 
    text1 = form.ms_1.data 
    text2 = form.ms_2.data 
    text3 = form.ms_3.data  
    processed_text = model.most_similar(positive=[text3, text2], negative = [text1])   
    return processed_text[0][0] 

Wenn ich meine run.py ausführen, um http://localhost:5000/ gehen, meine Eingabe ändern und klicken Sie auf die 'Submit' Taste, ich bekomme nur die Antwort auf meine Standard-Eingabe. Warum sendet er meine Eingabe nicht?

Vielen Dank für Ihre Hilfe und sorry für mein Englisch, FFoDWindow

Antwort

3

die Form in der Ansicht Instantiate, nicht als eine einzige global. Sie verwenden dieselbe Formularinstanz immer wieder und diese Instanz wurde ohne Formulardaten erstellt. Sie können GET und POST in einer Ansicht gruppieren.

@app.route('/') 
def index(): 
    form = msForm() 

    if request.method == 'POST' and form.validate(): 
     processed_text = model.most_similar(positive=[form.ms_3.data, form.ms_2.data], negative=[form.ms_1.data]) 
     return processed_text[0][0] 

    return render_template('my-form.html', form=form) 
+0

hey @davidism, danke für Ihre schnelle Antwort! Es scheint immer noch an einem Punkt zu scheitern .. Wenn ich den Submit-Button drücke, zeigt es mir einen Fehler 405 - Website hat einen Programmierfehler. Ist das meine Vorlage? Mein Formular sieht so aus: '

{{form.ms_1}} {{form.ms_2}} {{form.ms_3}} {{form.submit}}
' – FFoDWindow

+0

wenn ich '@ app.route' ('/ ') 'zu' @ app.route ('/', Methoden = [' GET, 'POST']) 'die Website gibt keinen Fehler zurück, aber jetzt ist es das gleiche Problem wie in meiner Frage - ich bekomme nur die antwort auf meine defaultdata ... – FFoDWindow

+0

Ich beantwortete meine eigene Frage. Ich musste die Sachen ändern, die ich in meinem letzten Kommentar gepostet habe und instanziiere 'form = msForm (request.form)'. – FFoDWindow

Verwandte Themen