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 文件的用法。
我正在尝试关注 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 文件的用法。