为什么Flask-WTF Form在POST请求中出现404错误而不是GET

时间:2013-08-21 20:40:36

标签: post flask flask-wtforms

我一直在看这个问题,尝试让这个表单识别POST,而不是产生404错误。

视图

from flask import *

from dockteck.models import EmailForm
from dockteck import app

# Page Routing 
@app.route('/')
def main():
    return render_template('index.html')

@app.route('/contact', methods=['GET', 'POST'])
def contact():
    form = EmailForm()
    if request.method == 'POST':
        return "Message Sent"
    elif request.method == 'GET':
        return render_template('contact.html', form=form)

@app.route('/portfolio')
def portfolio():
    return render_template('portfolio.html')

我有一个简单的联系功能,在请求页面GET时工作正常。以下联系页面加载页面GET:

{% extends "template.html" %}
{% block content %}


<h1>Contact Me</h1>



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

    <div class="row">
        <div class="large-4 columns">
            {{ form.name.label }}
            {{ form.name }}
        </div>

        <div class="large-4 columns">
            {{ form.email.label }}
            {{ form.email }}
        </div>

        <div class="large-4 columns">
            <div class="row collapse">
                {{ form.subject.label }}
                {{ form.subject }}
            </div>
        </div>
    </div>

    <div class="row">
        <div class="large-12 columns">
            {{ form.comment.label }}
            {{ form.comment }}              
        </div>      
    </div>
    <div class="row">
        <div class="large-6 columns">
            {{ form.submit }}
        </div>
    </div>

</form>
{% endblock %}

提交此表单后,它会返回404错误页面,因为它通过POST请求联系。此外,使用firefox开发工具检查,它显示该页面正在发布正确的页面/联系人,但超时时出现404错误,并提供此附加消息:

  

未声明HTML文档的字符编码。该   在某些浏览器配置中,文档将使用乱码文本呈现   如果文档包含US-ASCII范围之外的字符。   必须在文档中声明页面的字符编码   在转移协议中。

在模板文件中,我尝试了一些不同的声明,但它似乎没有什么区别:

<!DOCTYPE html>
<!--[if IE 8]>               <html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->

<head>
  <meta http-equiv="Content-Type" content="text/html"; charset="utf-8" /> 

如果我遗漏任何有助于解决此问题的信息,请告诉我。

编辑:这是EmailForm

from wtforms import Form, TextField, TextAreaField, validators, SubmitField

class EmailForm(Form):
    name = TextField('Full Name')
    email = TextField('Email Address')
    subject = TextField('Subject')
    comment = TextAreaField('Comments')
    submit = SubmitField('Send message')

1 个答案:

答案 0 :(得分:0)

尝试改变这些事情:
从method = post到method =“POST”
从form = EmailForm()到form = EmailForm(request.form)

告诉我你是否还有错误