【问题标题】:Flask WTF Form Validation ErrorFlask WTF 表单验证错误
【发布时间】:2016-12-23 20:22:47
【问题描述】:

我是 Flask 的新手,正在尝试从登录表单中获取用户输入的名称并将其传递到另一个页面。使用我当前的代码,当在result 视图中调用request.args.get('artistName') 时,表单不会向result 页面传递任何参数并返回none。怎么了? print form.errors 不显示任何内容。

views.py 计划:

from flask import render_template, request, url_for, redirect

from app import app
from .forms import UserName

@app.route('/', methods=['GET','POST'])
def login():
    form = UserName()

    if form.validate_on_submit():
        return redirect('/result')

    render_template('home.html',form=form)

@app.route('/result', methods=['POST', 'GET'])
def result(name):
    return render_template('results.html')

home.html:

{% extends "base.html" %}

{% block content %}
  <form action="{{ url_for('result') }}" method='post'>
    {{ form.csrf_token }}
    {{ form.hidden_tag }}
    <p>Enter your artist name: </p>
    {{ form.artistName(size=100) }}
    {{ form.submit }}
  </form>
{% endblock %}

还有forms.py

from flask_wtf import FlaskForm
from wtforms import TextField, SubmitField
from wtforms.validators import DataRequired

class UserName(FlaskForm):
    artistName = TextField('artistName', [DataRequired()])
    submit = SubmitField("Go")

非常感谢任何帮助!

【问题讨论】:

  • 如果您对/ 执行 GET 操作,生成的 HTML 表单是什么样的?
  • 我很抱歉,但你能说得更直白一点吗?
  • 没关系...我认为问题可能是由于您的 URL 结构。如果用户正在指定艺术家姓名,则该参数不应是路由的一部分,而应位于查询字符串中。例如:/result?name=foo。如果您将表单的方法更改为 GET 并从您的 url_for 语句中删除 name 参数,那么您将非常接近。
  • &lt;form action="{{ url_for('result') }}" method='get'&gt; 你是这个意思吗?如果是这样,这会导致BuildError: Could not build url for endpoint 'result'. Did you forget to specify values ['name']?
  • 参数从视图函数中取出,然后使用 request.args.get('artistName') 访问该字段。如果没有参数,则 url 不会按照它的配置方式构建。

标签: python flask wtforms flask-wtforms


【解决方案1】:

奇怪的想法,也许...现在我自己也是新手,但是您的登录视图中不应该有返回语句: 返回 render_template('home.html',form=form)?

【讨论】:

  • 请仅发布被视为答案的内容。看来这篇文章是一个问题。您可以向 cmets 部分的海报提问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多