Flask服务器端验证后请求格式

我有一个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,office)

return redirect(url_for('reports'))

但是我迷失了如何检查字符串的格式。任何指导都将不胜感激!

zgyanfeng 回答:Flask服务器端验证后请求格式

如果我对您的理解正确,那么您要寻找的是如何检查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)

本文链接:https://www.f2er.com/3144405.html

大家都在问