Получение данных из wtforms

Я экспериментировал с Word2vec и Gensim в качестве его реализации на Python. Теперь я должен сделать свою модель доступной на веб-сайте - поэтому мне нужен Flask. Я определил форму в forms.py так:

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

1 ответ

Решение

Создавать форму в представлении, а не как единый глобал. Вы используете один и тот же экземпляр формы снова и снова, и этот экземпляр был создан без каких-либо данных формы. Вы можете сгруппировать как GET, так и POST в одном представлении.

@app.route('/')
def index():
    form = msForm(request.form)
    # request.form not needed when using Flask-WTF

    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)
Другие вопросы по тегам