请求在Flask从一个表单在HTML返回None,我做错了什么?



我希望能够从表单中获取用户名并将其附加到确认页面,但它一直返回none

下面是HTML表单

<form name="sentMessage" id="contactForm" action="{{ url_for('contact') }}" method="post" novalidate>
  <div class="control-group">
    <div class="form-group floating-label-form-group controls">
      <label>Name</label>
      <input type="text" name="name" class="form-control" placeholder="Name" id="name" required data-validation-required-message="Please enter your name.">
      <p class="help-block text-danger"></p>
    </div>
  </div>
  <div class="control-group">
    <div class="form-group floating-label-form-group controls">
      <label>Email Address</label>
      <input type="email" name="email" class="form-control" placeholder="Email Address" id="email" required data-validation-required-message="Please enter your email address.">
      <p class="help-block text-danger"></p>
    </div>
  </div>
  <div class="control-group">
    <div class="form-group col-xs-12 floating-label-form-group controls">
      <label>Phone Number</label>
      <input type="tel" name="phone" class="form-control" placeholder="Phone Number" id="phone" required data-validation-required-message="Please enter your phone number.">
      <p class="help-block text-danger"></p>
    </div>
  </div>
  <div class="control-group">
    <div class="form-group floating-label-form-group controls">
      <label>Message</label>
      <textarea rows="5" name="message" class="form-control" placeholder="Message" id="message" required data-validation-required-message="Please enter a message."></textarea>
      <p class="help-block text-danger"></p>
    </div>
  </div>
  <br>
  <div id="success"></div>
  <button type="submit" class="btn btn-primary" id="sendMessageButton">Send</button>
</form>

和flask代码在

下面
@app.route("/contact")
def contact():
    return render_template("contact.html")

@app.route("/form-entry", methods=["GET", "POST"])
def receive_data():
    if request.method == "POST":
        name = request.form.get("name")
        return f"<h1>{name} Successfully sent your message</h1>"

我尝试使用request.form["name"],但它返回一个错误的请求

定义的模板,当通过/contact端点呈现时,以下行(用省略号替换不相关的属性):

<form ... action="{{ url_for('contact') }}" method="post" ...>

呈现

<form ... action="/contact" method="post" ...>

提交表单将再次击中相同的/contact端点,它不接受POST方法,因为接受methods的默认列表用于此。这导致了错误的请求报告。

假设预期目标是received_data函数,连接到/form-entry端点,则模板中url_for的预期参数应该是'receive_data',即

<form ... action="{{ url_for('receive_data') }}" method="post" ...>

将导致如下呈现:

<form ... action="/form-entry" method="post" ...>

当提交该表单时,应该使用预期的端点,并且应该毫无问题地呈现消息。

最新更新