Как проверить HTML-формы в Python Flask? - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть HTML-форма внутри целевой страницы, и я хочу отправить данные форм с помощью ajax в / data routing.
Проблема заключается в проверке этой HTML-формы в бэкэнде.
Я знаю о форме Flask WTF, но использование этого метода создаст форму на бэкэнде, что не в моем случае.

from flask import Flask, request, url_for
...
@app.route("/data", methods=["GET", "POST"])
def get_data():
if request.method == "POST":
    username = request.form["username"]
    ...  

Моя HTML-форма:

<form method="POST" action="">
<input type="text" name="username">
<input type="submit" value="Send">
</form>  

Один сложный способ - проверить каждое поле с помощью регулярных выражений и написать несколько условий для них. Меня интересует более простой способ?

1 Ответ

1 голос
/ 20 апреля 2019

Использование Webargs

from webargs import flaskparser, fields

FORM_ARGS = {
    'email': fields.Email(required=True),
    'username': fields.Str(required=True),

@app.route("/data", methods=["GET", "POST"])
def get_data():
    if request.method == "POST":
        parsed_args = flaskparser.parser.parse(FORM_ARGS, request)

Но если вы знаете формат входящих данных, вы все равно можете использовать WTF для сбора опубликованной информации (вам не нужно отображать WTForms на странице для этогона работу), например:

# import blurb    

class Form(FlaskForm):
    username = StringField('Username', validators=[InputRequired()])
    email = EmailField('Email', validators=[InputRequired(), Length(4, 128), Email()])

@app.route("/data", methods=["GET", "POST"])
def get_data():
    if request.method == "POST":
        form = Form()  # will register fields called 'username' and 'email'.
        if form.validate_on_submit():
            # do something
...