Python 为什么我的validate_on_submit()不';不行?

Python 为什么我的validate_on_submit()不';不行?,python,flask,flask-wtforms,Python,Flask,Flask Wtforms,填写表格并单击“提交”后,文件不会保存。表格为“未提交”的情况下有效。已经花了3个小时,找不到问题 main.py def new_add_payment(id,summ,less,typer): timer = datetime.datetime.now() f = codecs.open(os.path.abspath('invoices') + '/' + str(id) + '$' + str(timer) + '.json', 'w', 'utf-8') pay

填写表格并单击“提交”后,文件不会保存。表格为“未提交”的情况下有效。已经花了3个小时,找不到问题

main.py

def new_add_payment(id,summ,less,typer):
    timer = datetime.datetime.now()
    f = codecs.open(os.path.abspath('invoices') + '/' + str(id) + '$' + str(timer) + '.json', 'w', 'utf-8')
    payment = {'id': id, 'summ': summ, 'less': less, 'type': typer}
    f.write(str(payment))
在路线中,尝试不同的组合,但不起作用

routes.py

@app.route('/new_payment',methods = ['GET','POST',])
def new_add_payment():
    form = AddPaymentNew()
    if form.validate_on_submit():
        id = format(form.sub.data)
        summ = format(form.summ.data)
        lessons = format(form.summ.data)
        typer = request.form['options']
        main.new_add_payment(id,summ,lessons,typer)
        print('Submit successful')
        return render_template('ok.html')
    else:
        print('Fail to submit')
    return render_template('payment_new.html', title='NEW ADD PAYMENT',form=form)
我想主要的问题是在HTML文件中,但我想不出来

www.new.html

<!DOCTYPE HTML>

<html>
<head>
<meta charset="UTF-8">
<meta name="Generator" content="Wolf 1.42">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="keywords" content="">

<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" charset="UTF-8">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js" charset="UTF-8"></script>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<link href='https://fonts.googleapis.com/css?family=Actor|Lato:300|&subset=latin,latin-ext' rel='stylesheet' type='text/css'>

    <title>Payment</title>

</head>
<style type=text/css>

@import url('https://fonts.googleapis.com/css?family=Comfortaa&display=swap');
.new1 {font-family:'Comfortaa'}
.new2 {background-image:url(../static/ach/bg1.png)}
</style>
<body class="new2">
    <h1 class="new1" align="center">Оплата</h1>
    <form action="{{ new_add_payment }}">
        {{form.csrf_token}}
        <p class="new1" align="center">
            {{ form.sub.label }}<br>
            {{ form.sub(size=32) }}<br>
        </p>
        <p class="new1" align="center">
            {{ form.summ.label }}<br>
            {{ form.summ(size=32) }}<br>
        </p>

        <p class="new1" align="center">
        <input type="radio" name="options" id="option1" value="1"> 1 |
        <input type="radio" name="options" id="option2" value="2"> 2 |
        <input type="radio" name="options" id="option5" value="5"> 3 |
        <input type="radio" name="options" id="option3" value="3"> 4 |
        <input type="radio" name="options" id="option4" value="4"> 5 |
        <input type="radio" name="options" id="option6" value="6"> 6
        </p>
        <p class="new1" align="center">
            {{ form.lessons.label }}<br>
            {{ form.lessons(size=32) }}<br>
        </p>
        <p class = 'new1' align="center">{{form.submit()}}</p>
        <p class="new1" align="center"><a href="menu">Back</a></p>
        <p class="new1" align="center">Payments v.1.1</p>


    </form>
</body>

付款
@导入url('https://fonts.googleapis.com/css?family=Comfortaa&display=swap');
.new1{font系列:'Comfortaa'}
.new2{背景图像:url(../static/ach/bg1.png)}
Оплата
{form.csrf_token}

{{form.sub.label}}
{{form.sub(size=32)}}

{{form.summ.label}}
{{form.summ(size=32)}}

1 | 2 | 3 | 4 | 5 | 6.

{{form.lessons.label}}
{{form.lessons(size=32)}}

{{form.submit()}

支付第1.1节


此处信息不足-您没有显示表单定义。为什么不在调用submit之前打印表单的内容(或使用调试器),以确保路由正常工作,并且获得的数据是您所想的

与您的其他信息-您的提交按钮不应该有任何验证器(因为它不传输任何数据)。
另外-form.errors按字段列出了遇到的所有错误。我会打印出来。

要准确检查验证失败的地方,可以在模板中添加这段代码,以方便调试过程

{% for error in form.errors %}

    <div class="alert alert-danger alert-dismissible">
    <p><i class="icon fas fa-ban"></i> Alert!</p>
        {{ error }} invalid
    </div>
{% endfor %}
{%for form.errors%}
警惕

{{error}}无效 {%endfor%}
除此之外,您的表单没有指定给的方法

<form action="/controller_method/" method="post">


Adding method=“post”to donthingmy form.py
class AddPaymentNew(FlaskForm):sub=IntegerField('IDССаааа),validator=[DataRequired()),sum=IntegerField('ССааааааааааааааааsubmit=SubmitField('Сбббббббб',验证器=[DataRequired()])
我已经这样做了。程序采用的路径总是在验证失败时结束