Flask 表单提交错误

Flask Formsubmission Error

我正在尝试关注 This Tutorial to add forms to my crappy site。进展是局部的,所以我网站上的联系页面坏了。

具体来说,我无法让烧瓶识别 post 请求。观察调试器给出了线索​​,错误如下。我遵循了(链接的)教程,并且能够让它工作,我试图将类似的想法移动到我的网站,但这是行不通的。

看着调试器,我转到联系页面,填写表格并点击提交。 get 有效,post 无效。

日志:

127.0.0.1 - - [13/Mar/2015 22:11:47] "GET /contact HTTP/1.1" 200 -  
127.0.0.1 - - [13/Mar/2015 22:11:50] "POST /mail/contact_me.php HTTP/1.1" 404 -

我不知道 /mail/contact_me.php 是什么,我没有这样命名的文件或文件夹。

一个主要线索(这对我来说毫无意义)是从此 contact.html 中删除模板继承允许表单工作。

原来的(非功能性)contact.html是:

{% extends "base.html" %}
{% block content %}
<h2>Contact</h2>
<form action="{{ url_for('contact') }}" method=post>
{{ form.hidden_tag() }}

{{ form.name.label }}
{{ form.name }}

{{ form.email.label }}
{{ form.email }}

{{ form.subject.label }}
{{ form.subject }}

{{ form.message.label }}
{{ form.message }}

{{ form.submit }}
</form>
{% endblock %}

删除模板(删除前两行和最后一行)允许表单正确 post。删除、重新加载页面并提交表单后,我在调试器中得到以下日志:

127.0.0.1 - - [13/Mar/2015 22:43:46] "GET /contact HTTP/1.1" 200 -
127.0.0.1 - - [13/Mar/2015 22:43:48] "POST /contact HTTP/1.1" 200 -

它现在也可以工作,提交表单 returns 占位符字符串。
我的模板似乎以某种方式破坏了表单,您认为是什么原因造成的?

其他可能相关的代码块。

路由文件

.
.
@app.route('/contact', methods=['GET', 'POST'])
def contact():
  form = ContactForm() 
  if request.method == 'POST':
    return 'Form posted.'

  elif request.method == 'GET':
    return render_template('contact.html', form=form)
.
.

forms.py

from flask_wtf import Form
from wtforms import TextField, TextAreaField, SubmitField
class ContactForm(Form):
    name = TextField("Name")
    email = TextField("Email")
    subject = TextField("Subject")
    message = TextAreaField("Message")
    submit = SubmitField("Send")

我的代码的一个更完整的例子在这里,虽然最近的变化——上面的代码——还没有被推送。我需要更多声望,但它是 https:// github.com/terwilld/website

谢谢

我想我发现了你的错误。您的 clean-blog.min.js 文件正在拦截您的 Submit 事件并 POSTING 到那个虚假的 URI:

$(function () {
    $("input,textarea").jqBootstrapValidation({
        preventSubmit: !0, submitError: function () {
        }, submitSuccess: function (a, b) {
            b.preventDefault();
            var c = $("input#name").val(), d = $("input#email").val(), e = $("input#phone").val(), f = $("textarea#message").val(), g = c;
            g.indexOf(" ") >= 0 && (g = c.split(" ").slice(0, -1).join(" ")), $.ajax({
                url: "././mail/contact_me.php",
                type: "POST",
                data: {name: c, phone: e, email: d, message: f},

听起来您需要重新考虑 JavaScript 文件的用法。