我是一个编码初学者,目前正在学习Python。我最近一直在使用烧瓶和WTForms创建一个注册表格。除了遵循教程来构建表单之外,我还试图稍微理解它,看看它是如何工作的(只是一般情况下)。所以我的问题是关于StringField的。
我已经创建了一个名为registr.html的html文件,它将被呈现。在这个html文件中,有两行代码将创建一个字段,供用户输入他们的用户名,请参见下面:
{ form.username.label }
{{ form.username }
在我的Python应用程序中,我创建了下面的内容,比如A部分:
from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired
class RegistrationForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])下面是B节:
@app.route("/register", methods=['GET', 'POST'])
def register():
form = RegistrationForm()
return render_template('register.html', title='Register', form=form)这是我的问题。我知道form.username.label会把“用户名”标签放在输入字段的上方,这样人们就会知道这是他们输入用户名的地方。然后我认为form.username所做的实际上是创建一个字段,这样人们就可以在其中输入一些东西。因此,我的理解是用户名是一个等于StringField(' username ',validators=DataRequired())的属性,它是StringField类的对象,并且由于表单等于RegistrationForm(),所以在html文件中执行form.username就像执行Registration.StringField('Username',validators=DataRequired())一样。我说对了吗?如果是这样的话,执行对象StringField('Username',validators=DataRequired())如何能够在html中创建一个输入字段?我们能执行一个对象吗?我认为我们只能在类中执行一个方法,对吗?所以肯定还有别的事情我不明白。再说一遍,我仍然是一个初学者,学习Python。因此,任何帮助都是非常感谢的!
发布于 2020-02-01 08:17:38
有一个默认的呈现小部件。如果需要呈现自定义HTML (https://wtforms.readthedocs.io/en/stable/widgets.html),则可以覆盖小部件。使用的呈现小部件的具体内容如下:
class Input(object):
"""
Render a basic ``<input>`` field.
This is used as the basis for most of the other input fields.
By default, the `_value()` method will be called upon the associated field
to provide the ``value=`` HTML attribute.
"""
html_params = staticmethod(html_params)
def __init__(self, input_type=None):
if input_type is not None:
self.input_type = input_type
def __call__(self, field, **kwargs):
kwargs.setdefault("id", field.id)
kwargs.setdefault("type", self.input_type)
if "value" not in kwargs:
kwargs["value"] = field._value()
if "required" not in kwargs and "required" in getattr(field, "flags", []):
kwargs["required"] = True
return Markup("<input %s>" % self.html_params(name=field.name, **kwargs))https://stackoverflow.com/questions/59902826
复制相似问题