Я пытаюсь создать собственный валидатор URL для поля ввода формы, но валидатор, похоже, не работает. Я применил DataRequired()
к StringField
, который работает нормально, но пользовательский валидатор - нет. Вот код:
def validate_domain(form, field):
url_regex = r'''((http|https)\:\/\/)?[a-zA-Z0-9\.\/\?\:@\-_=#]+\.
([a-zA-Z]){2,6}([a-zA-Z0-9\.\&\/\?\:@\-_=#])*'''
regex = re.compile(url_regex)
url = regex.match(field.data).group()
if url:
field.data = 'http://' + urlparse(url).netloc
else:
raise ValidationError('Please enter a valid URL.')
class SubmitDomainForm(Form):
domain = StringField('Domain', validators=[DataRequired(),
validate_domain])
submit = SubmitField('Crawl')
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">{{ legend }}</legend>
<div class="form-group">
{{ form.domain.label(class="form-control-label") }}
{% if form.domain.errors %}
{{ form.domain(class="form-control form-control-lg is-invalid") }}
<div class="invalid-feedback">
{% for error in form.domain.errors %}
<span>{{ error }}</span>
{% endfor %}
</div>
{% else %}
{{ form.domain(class="form-control form-control-lg") }}
{% endif %}
</div>
</fieldset>
<div class="form-group">
{{ form.submit(class="btn btn-outline-info") }}
</div>
</form>
{% endblock content %}
Даже когда я отправляю не URL-адрес, форма просто отправляется. Я не могу понять, что здесь происходит не так.