我想这个问题可以在如何实现自定义Python模块的帮助下更一般地解释。
我正在构建Flask Web应用程序,并尝试创建一个相当复杂的表单,该表单基本上允许用户在单击按钮时添加更多字段,但仍保留WTForms的优点。
我在线上遇到了这个模块:https://pypi.org/project/WTForms-Dynamic-Fields/
我对应该如何实现该模块感到困惑。
它表示在使用add_field()和add_validator()方法之前创建模块的实例。然后将表单变量绑定到'process()'方法。我想我应该包含一个JavaScript按钮,但对于如何执行此操作却很困惑。
作为一个简单的示例,我试图在此简单的WTForm上实现它:
class LoginForm(FlaskForm):
username = StringField('username', validators=[InputRequired()])
password = PasswordField('password', validators=[InputRequired()])
dynamic = WTFormsDynamicFields()
HTML表单:
<form method="POST" action="{{url_for('form')}}">
{{ form.csrf_token }}
{{ render_field(form.username) }}
{{ render_field(form.password) }}
<button onclick="dynamic.add_field('email', 'Email address', TextField)">Click Me!</button>
App.py:
@app.route('/form/', methods=['GET', 'POST'])
def form():
form = dynamic.process(LoginForm(), request.post)
if form.validate_on_submit():
return '<h1>Thanks</h1>'
return render_template("form.html", form=form)
有人可以快速浏览一页文档,并告诉我该如何实现。这也将帮助我继续使用其他模块(相对初学者)。
谢谢。