Проверка на стороне сервера Flask для формата почтового запроса - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть HTML-форма с вводом для значения в долларах США.

<tr>
                                        <form action="/save_report/" method="POST">
                                        <td>{{event.event_name}}</td>
                                        <input type="hidden" name='id' id="e_name" value="{{event.event_ID}}">
                                        <td>{{event.office}}<br></td>
                                        <td>{{event.event_city}}</td>
                                        <td>
                                        {% for r in event.reps %}
                                        <li>{{r.date_worked.strftime('%m-%d-%Y')}} By {{r.rep}}</li>
                                        {% endfor %}
                                        </td>
                                        <td>{{event.items}}</td>
                                        <td>
                                          <label for="total">Total bill for event</label><br>
                                          <input type="number" min=0 step=".01" id="total" value="" name="total" placeholder="50.00" required><br>
                                          <input type="hidden" name="id" value="{{event.event_ID}}">
                                          <input type="hidden" name="office" value="{{event.office}}">
                                          <button type="submit" class="btn btn-primary btn-md">Save</button>
                                        </td>
                                        </form>
                                      </tr>

это работает только в некоторых браузерах, и мне не нужны маленькие стрелки на вводе чисел.

Я мог бы проверить с помощью JS, но если пользователь выключил его, это все равно не решит проблему.

Я хотел бы отправить данные на сервер и убедиться, что строка в запросе на отправку отформатирована как12.34 и если нет, вернуть ошибку в HTML.

Вот текущая сторона сервера:

@app.route('/save_report/',methods=['POST', 'GET'])
@login_required
def save_report():
    role = session.get('role')
    name = session.get('name')
    id = session.get('id')

    if request.method == 'POST':
        total=request.form['total']
        event=request.form['id']
        office=request.form['office']

        print(total,event,office)

    return redirect(url_for('reports'))

Я думаю, что это своего рода оператор if, подобный этому

    if request.method == 'POST':
    total=request.form['total']
    event=request.form['id']
    office=request.form['office']

    # Need to validate format here?
    if total != "11.11":
        return redirect(url_for('reports' error=error))
    else:
    print(total,event,office)

return redirect(url_for('reports'))

Однако я заблудился о том, как проверить формат строки. Любое руководство с благодарностью!

1 Ответ

1 голос
/ 07 ноября 2019

Если я правильно вас понял, то, что вы ищете, это как проверить, является ли total значением с плавающей запятой. Вы можете просто проверить это с помощью модуля re.

@app.route('/save_report/',methods=['POST', 'GET'])
@login_required
def save_report():
    role = session.get('role')
    name = session.get('name')
    id = session.get('id')

    if request.method == 'POST':
        total=request.form['total']
        event=request.form['id']
        office=request.form['office']

        if re.match("^\d+?\.\d+?$", total) is None:
            return redirect(url_for('error_page'))
    return redirect(url_for('reports'))

Кроме регулярных выражений, вы можете просто проверить это так же.

try:
    f_total = float(total)
except ValueError:
    return redirect(url_for('error_page'))

Если вы хотите принять только двузначное значение с плавающей запятойс двумя десятичными знаками вы можете использовать это регулярное выражение re.match("^\d{2}\.\d{2}$", total)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...