这是
我遵循了很多线程,这表明问题代码位于我的表单类验证器中,但是我已经检查了它们。.此处是fo中类的代码
1。这是来自forms.py
的代码from flask_wtf import Form
from wtforms import StringField, SubmitField, BooleanField, PasswordField
from wtforms.validators import DataRequired, Length, email, EqualTo, Required
class RegistrationForm(Form):
username = StringField('username', validators=[DataRequired(),
Length(min=2, max=20)])
email = StringField('email', validators=[DataRequired(), email])
password = PasswordField('password', validators=[DataRequired()])
conf_password = PasswordField('conf_pass', validators=[DataRequired(),
EqualTo('password', message='passwords must match')])
submit = SubmitField('sign up')
2。这是模板文件中的代码
{% extends 'layout.html' %}
{% block content %}
<div class="card" width="300px">
<form method="post" action="">
{{ form.hidden_tag() }}
<feildset>
<legend>
join Today
</legend>
</feildset>
<hr>
{{ form.username.label }}
{{ form.username }}
{{ form.email.label }}
{{ form.email }}
{{ form.password.label }}
{{ form.password }}
{{ form.conf_password.label }}
{{ form.conf_password() }}
{{ form.submit(class='success button centering') }}
</form>
</div>
{% endblock %}
3。这是来自app.py的代码
@app.route('/reg', methods=['GET', 'POST'])
def show_reg():
form = RegistrationForm()
if form.validate_on_submit():
flash(f'Account created for {form.username.data}!', 'success')
return redirect(url_for('home'))
return render_template('register.html', title='register', form=form)
3。stacktrace:
Traceback (most recent call last):
File "/root/PycharmProjects/site/venv/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/root/PycharmProjects/site/venv/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/root/PycharmProjects/site/venv/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/root/PycharmProjects/site/venv/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/root/PycharmProjects/site/venv/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/root/PycharmProjects/site/venv/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/root/PycharmProjects/site/app.py", line 37, in show_reg
if form.validate_on_submit():
File "/root/PycharmProjects/site/venv/lib/python3.6/site-packages/flask_wtf/form.py", line 101, in validate_on_submit
return self.is_submitted() and self.validate()
File "/root/PycharmProjects/site/venv/lib/python3.6/site-packages/wtforms/form.py", line 310, in validate
return super(Form, self).validate(extra)
File "/root/PycharmProjects/site/venv/lib/python3.6/site-packages/wtforms/form.py", line 152, in validate
if not field.validate(self, extra):
File "/root/PycharmProjects/site/venv/lib/python3.6/site-packages/wtforms/fields/core.py", line 206, in validate
stop_validation = self._run_validation_chain(form, chain)
File "/root/PycharmProjects/site/venv/lib/python3.6/site-packages/wtforms/fields/core.py", line 226, in _run_validation_chain
validator(form, self)
TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given
答案 0 :(得分:0)
最好的机会,问题出在email
验证程序中:wtforms期望一个类 instance ,但是您已经通过了一个类,因此,当wtforms执行{{ 1}}他们调用 class 的init方法,而不是 instance 的调用方法。更改为validator(form, self)
应该可以解决。