flask -wtf форма не отправляет данные формы? - PullRequest
1 голос
/ 19 февраля 2020

Для контекста я пытаюсь создать форму flask -wtf. Я сделал это, и он представлен правильно:

class LoginForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired()])
    password = PasswordField('Password', validators=[DataRequired()])
    submit = SubmitField('Sign In')

@APP.route('/')
def index():
    return render_template('login.html', form=LoginForm())

@APP.route('/login', methods=['POST', 'GET'])
def login():
    print(request.method, request.get_json())
    return redirect('/')  # temporary

Вот html:

{% block content %}
    <h1>Sign In</h1>
    <form action="/login" method="post" enctype='application/json'>
        {{ form.hidden_tag() }}
        <p>
            {{ form.username.label }}<br>
            {{ form.username(size=32) }}
        </p>
        <p>
            {{ form.password.label }}<br>
            {{ form.password(size=32) }}
        </p>
        <p>{{ form.submit() }}</p>
    </form>
{% endblock %}

Однако, когда я ввожу что-либо и нажимаю «Отправить», то печатается из login() это POST None. Я не понимаю, почему не отправляются данные. В качестве попытки заставить его быть json, я добавил enctype='application/json' и ничего до или после.

Чего мне не хватает?

1 Ответ

1 голос
/ 19 февраля 2020

Вы не можете отправить форму как JSON, есть только 3 опции для enctype.

В вашей функции login() вы можете получить доступ к форме через request.form или при использовании wtforms инициализируйте форму в своем представлении для заполнения данными:

def login():
    login_form = LoginForm()

    if login_form.validate_on_submit(): # this runs only on POST, and checks validation
        username = form.username.data
        password = form.password.data
    ...
...