Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Flask-Submit按钮提交所有表单,而不是一个表单_Python_Html_Flask_Flask Wtforms_Wtforms - Fatal编程技术网

Python Flask-Submit按钮提交所有表单,而不是一个表单

Python Flask-Submit按钮提交所有表单,而不是一个表单,python,html,flask,flask-wtforms,wtforms,Python,Html,Flask,Flask Wtforms,Wtforms,我在我的一页中使用了两个表单,一个用于结账,另一个用于发送回复。 但问题是当我提交其中一个时,另一个也提交了!并显示闪光按摩。所以我有两个闪光按摩! 这变得更复杂了,因为我正在检查一些条件来显示第一种形式,在这种情况下,哪种形式甚至不再出现,我有两次闪光按摩 @app.route('/edit-ticket', methods=['GET', 'POST']) def edit_ticket(): if session['logged_in'] == True: trackingNumb

我在我的一页中使用了两个表单,一个用于结账,另一个用于发送回复。 但问题是当我提交其中一个时,另一个也提交了!并显示闪光按摩。所以我有两个闪光按摩! 这变得更复杂了,因为我正在检查一些条件来显示第一种形式,在这种情况下,哪种形式甚至不再出现,我有两次闪光按摩

@app.route('/edit-ticket', methods=['GET', 'POST'])
def edit_ticket():
if session['logged_in'] == True:
    trackingNumberLink = int(request.args.get('trackingNumber'))
    closeForm = CloseTicket()
    editForm = EditTicket()
    GetTicketStatus = tickets.find_one({"trackingNumber": trackingNumberLink})
    if closeForm.validate_on_submit():
        tickets.update_one({"trackingNumber": trackingNumberLink},
                           {"$set": {"status": "پاسخ داده شده", "order": 2}})
        flash(u"تیکت مورد نظر با موفقیت بسته شد.")
    if editForm.validate_on_submit():
        replyDate = jdatetime.datetime.now()
        tickets.update_one({"trackingNumber": trackingNumberLink},
                           {"$set": {"status": "در حال بررسی", "order": 1}})
        tickets.update_one({"trackingNumber": trackingNumberLink},
                           {"$push": {"replies": {"rep": {"mass": editForm.ticketMassage.data,
                                                          "date": replyDate.strftime("%H:%M:%S %d-%m-%y "),
                                                          "HowSent": "user"}}}})
        flash(u"پاسخ با موفقیت ارسال شد.")
    return render_template('edit-ticket.html', Title="ویرایش تیکت", closeForm=closeForm,
                           editForm=editForm, CanUserCloseTicket=GetTicketStatus)
else:
    return redirect(url_for('Login'))
HTML:


使用id属性呈现表单标记,对于提交和输入标记,使用表单属性

<form id="edit-ticket">
    {{ form.submit(form="edit-ticket") }}
edit-ticket.html

<form method="post" id="edit-form" novalidate></form>
<form method="post" id="close-form" novalidate></form>
    {{ edit_form.csrf_token(form="edit-form") }}
    {{ close_form.csrf_token(form="close-form") }}
    {{ edit_form.ticket_message(form="edit-form") }}
    {{ edit_form.edit(form="edit-form") }}
    {{ close_form.message(form="close-form") }}
    {{ close_form.close(form="close-form") }}

{{edit_form.csrf_令牌(form=“edit form”)}
{{close_form.csrf_令牌(form=“close form”)}
{{edit_form.ticket_message(form=“edit form”)}
{{edit_form.edit(form=“edit form”)}
{{close_form.message(form=“close form”)}
{{close_form.close(form=“close form”)}

在表单上添加操作,而不是将其留空:

<form method="post" action="/close-ticket"> ... </form>

<form method="post" action="/edit-ticket"> ... </form>

你好,罗伊,谢谢你的回复。我尝试了你的建议,在两个表单中都添加了id和submit bottoms,但我仍然有相同的问题。表单元素也应该具有
form=”“
属性`我按照你说的做了,但仍然没有运气。看,当我提交一个表单时,它也会进入另一个表单validate_on_submit()条件,这就是为什么我有两个flash消息,因为在某些情况下,我的页面中没有两个表单!我已经更新了答案,
如果关闭表单。在提交()上验证表单并关闭表单。关闭。数据:
解决了问题。非常感谢更新。问题解决了。但我仍然有一点冲突,那就是:当我在我的页面中准备好两个表单时,我点击close ticket,它会检查edit ticket form并给我验证错误!截图:谢谢你的回复。我很感谢你的帮助,但我需要一页一张表格。你写的这个例子很好,但不是我写的。
from flask import Flask, render_template
from flask_wtf import FlaskForm, CSRFProtect
from wtforms.fields import SubmitField, TextAreaField

app = Flask(__name__)


app.config['SECRET_KEY'] = '^%huYtFd90;90jjj'
app.config['UPLOADED_FILES'] = 'static/files'


csrf = CSRFProtect(app)


class EditTicketForm(FlaskForm):
    ticket_message = TextAreaField()
    edit = SubmitField()


class CloseTicketForm(FlaskForm):
    message = TextAreaField()
    close = SubmitField()


@app.route('/edit-ticket', methods=['GET', 'POST'])
def edit_ticket():
    close_form = CloseTicketForm()
    edit_form = EditTicketForm()
    if close_form.is_submitted() and close_form.close.data:
        if close_form.validate():
            x = close_form.message.data
            return x.upper()
    if edit_form.is_submitted() and edit_form.edit.data:
        if edit_form.validate():
            y = edit_form.ticket_message.data
            return y.upper()
    return render_template('edit-ticket.html', close_form=close_form, edit_form=edit_form)


if __name__ == "__main__":
    app.run(debug=True)
<form method="post" id="edit-form" novalidate></form>
<form method="post" id="close-form" novalidate></form>
    {{ edit_form.csrf_token(form="edit-form") }}
    {{ close_form.csrf_token(form="close-form") }}
    {{ edit_form.ticket_message(form="edit-form") }}
    {{ edit_form.edit(form="edit-form") }}
    {{ close_form.message(form="close-form") }}
    {{ close_form.close(form="close-form") }}
<form method="post" action="/close-ticket"> ... </form>

<form method="post" action="/edit-ticket"> ... </form>
@app.route('/close-ticket', methods=['POST'])
def close_ticket():
    if session['logged_in'] != True:
        return redirect(url_for('Login'))
    # closeForm handling, etc....

@app.route('/edit-ticket', methods=['POST'])
def edit_ticket():
    if session['logged_in'] != True:
        return redirect(url_for('Login'))
    # editForm handling, etc....