2016-05-02 10 views
0

私はword2vecとgensimをPythonの実装として試しています。今私はウェブサイト上で私のモデルにアクセス可能にする必要があります - だから私はフラスコが必要です。今、私のviews.pyのように見える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() 

:私はそのようなforms.pyでフォームを定義し、私は私のrun.pyを実行すると

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] 

http://localhost:5000/に行き、私の入力やクリックを変更します'Submit'ボタンを押すと、私は自分のデフォルト入力で答えを得るだけです。なぜ彼は私の入力を送信しないのですか?

あなたの助けのおかげで、私の英語のため申し訳ありませんが、 FFoDWindow

答えて

3

はない単一のグローバルとして、ビューでフォームをインスタンス化します。あなたは同じフォームインスタンスを繰り返し使用しています。そのインスタンスはフォームデータなしで作成されました。 1つのビューでGETとPOSTの両方をグループ化できます。

@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

ちょっと@davidism、あなたの早い回答に感謝します!それはまだいくつかのポイントで失敗するようです..私が送信ボタンを押すと、私にエラー405を表示する - ウェブサイトはプログラミングエラーがあります。これは私のテンプレートですか?私のフォームは次のようになります: '

FFoDWindow

+0

の場合は

{{form.ms_1}} {{form.ms_2}} {{form.submit}}
' ') '' @ app.route('/'、methods = [' GET、 'POST']) 'ウェブサイトはエラーを返しませんが、今は私の質問と同じ問題です。私のデフォルトのデータで答え... – FFoDWindow

+0

私は自分の質問に答えました。最後のコメントに投稿したものを変更し、 'form = msForm(request.form)'をインスタンス化する必要がありました。 – FFoDWindow

関連する問題