【发布时间】: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