2016-05-02 6 views
0

Я экспериментировал с word2vec и gensim как с его реализацией на python. Теперь я должен сделать свою модель доступной на Веб-сайте, поэтому мне нужна Flask. Я определил форму в forms.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() 

теперь мой views.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] 

Когда я исполняю свой run.py, перейдите http://localhost:5000/, изменить свой вход и нажмите кнопку «Отправить», я получаю только ответ на свой ввод по умолчанию. Почему он не отправляет мой вход?

Спасибо за вашу помощь и извините за мой английский, FFoDWindow

ответ

3

Instantiate форму в представлении, а не как единый глобальный. Вы используете один и тот же экземпляр формы снова и снова, и этот экземпляр был создан без каких-либо данных формы. Вы можете группировать 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

эй @ давидизм, спасибо за ваш быстрый ответ! Кажется, что он терпит неудачу в какой-то момент. Когда я нажму кнопку отправки, покажу мне ошибку 405 - У веб-сайта есть ошибка программирования. Это мой шаблон? Моя форма выглядит так: '

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

+0

if i Измените' @ app.route ('/ ') 'to' @ app.route ('/', methods = [' GET, 'POST]] 'Сайт не возвращает ошибку, но теперь это та же проблема, что и в моем вопросе - я получаю только ответ на мой defaultdata ... – FFoDWindow

+0

Я ответил на свой вопрос. Мне нужно было изменить материал, который я опубликовал в своем последнем комментарии, и создать экземпляр 'form = msForm (request.form)'. – FFoDWindow

 Смежные вопросы

  • Нет связанных вопросов^_^