【问题标题】:Flask WTForms not allowing me to input anything to the formsFlask WTForms 不允许我在表单中输入任何内容
【发布时间】:2021-05-28 08:53:14
【问题描述】:

我正在关注一个使用 Flask 的网络应用教程,其中有一节介绍了如何实现 WTForms。我正确地遵循了所有内容,一切正常,就像我可以进入页面并且所有字段都显示一样。但我无法在实际字段中输入任何内容。该按钮有效,它会显示错误页面,因为我没有做任何事情来存储它们,但我实际上无法单击例如用户名并开始输入。它将其视为一堆文本。我正在关注的教程已有两年之久,所以这可能是问题所在,也许新的更新已经改变了它。

我当前的 WTForms 版本是 2.3.3

我尝试查看文档并遵循最新的教程,但仍然没有进展。我查看了速成课程部分,但我尝试编辑以匹配该样式的任何内容都无法修复它。

下面是它的外观:

forms.py:

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, BooleanField
from wtforms.validators import DataRequired, Length, Email, EqualTo

class RegistrationForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired(), Length(min=2, max=20)])

    email = StringField('Email', validators=[DataRequired(), Email()])

    password = PasswordField('Password', validators=[DataRequired()])
    confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])

    submit = SubmitField('Sign Up')

class LoginForm(FlaskForm):
    email = StringField('Email', validators=[DataRequired(), Email()])

    password = PasswordField('Password', validators=[DataRequired()])
    remember = BooleanField('Remember Me')

    submit = SubmitField('Login')

注册.html:

{% extends "layout.html" %}
{% block content %}
<div class="content-section">
    <form method="POST" action="">
        {{ form.hidden_tag() }}
        <fieldset class="form-group">
            <legend class="border-bottom mb-4">Join Today</legend>
            <div class="form-group">
                {{ form.username.label(class="form-control-label") }}
                {{ form.username.label(class="form-control form-control-lg") }}
            </div>
            <div class="form-group">
                {{ form.email.label(class="form-control-label") }}
                {{ form.email.label(class="form-control form-control-lg") }}
            </div>
            <div class="form-group">
                {{ form.password.label(class="form-control-label") }}
                {{ form.password.label(class="form-control form-control-lg") }}
            </div>
            <div class="form-group">
                {{ form.confirm_password.label(class="form-control-label") }}
                {{ form.confirm_password.label(class="form-control form-control-lg") }}
            </div>

        </fieldset>
        <div class="form-group">
            {{ form.submit(class="btn btn-outline-info") }}
        </div>
    </form>
</div>
<div class="border-top pt-3">
    <small class="text-muted">
        Already Have An Account? <a class="ml-2" href="{{ url_for('login') }}">Login</a>
    </small>


</div>
{% endblock content %}

Main.py:

from flask import Flask, render_template, url_for
from forms import RegistrationForm, LoginForm
app = Flask(__name__)



posts = [
    {
        "author": "John Appleseed",
        "title": "Blog Post 2",
        "content": "Second Post Content",
        "date_posted": "Feb 26 2021"
    },
    {
        "author": "John Doe",
        "title": "Blog Post 3",
        "content": "Third Post Content",
        "date_posted": "Feb 27 2021"
    }
]

@app.route('/')
@app.route('/home')
def home():
    return render_template('home.html', posts=posts)

@app.route('/about')
def about():
    return render_template('about.html', title="About")

@app.route('/register')
def register():
    form = RegistrationForm()
    return render_template('register.html', title="Register", form=form)

【问题讨论】:

  • 你在不同的浏览器上试过了吗? (如果是 - 哪些?)
  • 是否只发生在UserName字段?输入Password 怎么样 - 这也不起作用吗? (似乎Username 上有一个min=2 要求 - 这让我想到,输入最多 2 个字符的内容可能是无效的,这就是为什么它会阻止您在用户名中输入任何内容)
  • 它们都不起作用,我也在 Safari 中尝试过。没有进展:(

标签: python html forms flask wtforms


【解决方案1】:

我只需要删除 HTML 文件中的 .label。

<fieldset class="form-group">
            <legend class="border-bottom mb-4">Join Today</legend>
            <div class="form-group">
                {{ form.username.label(class="form-control-label") }}
                {{ form.username(class="form-control form-control-lg") }}
            </div>
            <div class="form-group">
                {{ form.email.label(class="form-control-label") }}
                {{ form.email(class="form-control form-control-lg") }}
            </div>
            <div class="form-group">
                {{ form.password.label(class="form-control-label") }}
                {{ form.password(class="form-control form-control-lg") }}
            </div>
            <div class="form-group">
                {{ form.confirm_password.label(class="form-control-label") }}
                {{ form.confirm_password(class="form-control form-control-lg") }}
            </div>

        </fieldset>
        <div class="form-group">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-03
    • 2021-11-15
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多