mirror of
https://github.com/wassname/wtforms-parsleyjs.git
synced 2026-06-27 20:08:21 +08:00
349 lines
9.5 KiB
Python
349 lines
9.5 KiB
Python
__author__ = 'Johannes Gehrs (jgehrs@gmail.com)'
|
|
|
|
from flask import Flask, render_template, request
|
|
from wtforms import Form, validators
|
|
import wtformsparsleyjs
|
|
import datetime
|
|
|
|
app = Flask(__name__)
|
|
|
|
|
|
@app.route('/parsley_testform', methods=['GET', 'POST'])
|
|
def parsley_testform():
|
|
form = ParsleyTestForm(request.form)
|
|
if request.method == 'POST': form.validate()
|
|
return render_template('wtforms_parsley_sample.html', form=form)
|
|
|
|
|
|
class ParsleyTestForm(Form):
|
|
email = wtformsparsleyjs.EmailField(
|
|
label = 'E-Mail Address',
|
|
validators = [
|
|
validators.Email(
|
|
message = 'Sorrry, not a valid email address.'
|
|
)
|
|
],
|
|
default='test@example.com'
|
|
)
|
|
|
|
ip_address = wtformsparsleyjs.StringField(
|
|
label = 'IP4 Address',
|
|
validators = [
|
|
validators.IPAddress(
|
|
message = 'Sorry, not a valid IP4 Address.'
|
|
)
|
|
],
|
|
default='127.0.0.1'
|
|
)
|
|
|
|
uuid = wtformsparsleyjs.StringField(
|
|
label = 'UUID',
|
|
validators = [
|
|
validators.UUID(
|
|
message = 'Sorry, not a valid UUID.'
|
|
)
|
|
],
|
|
default='863b5570-ee85-4099-ba1d-33018282cd00'
|
|
)
|
|
|
|
mac_address = wtformsparsleyjs.StringField(
|
|
label = 'Mac Address',
|
|
validators = [
|
|
validators.MacAddress(
|
|
message = 'Sorry, not a valid mac address.'
|
|
)
|
|
],
|
|
default = '10:B0:46:8C:80:48'
|
|
)
|
|
|
|
string_length = wtformsparsleyjs.StringField(
|
|
label = 'Length of String (5 to 10)',
|
|
validators = [
|
|
validators.Length(
|
|
message = 'Length should be between 5 and 10 characters.',
|
|
min = 5,
|
|
max = 10
|
|
)
|
|
],
|
|
default = 'Hello!'
|
|
)
|
|
|
|
number_range = wtformsparsleyjs.IntegerField(
|
|
label = 'Number Range (5 to 10)',
|
|
validators = [
|
|
validators.NumberRange(
|
|
message = 'Range should be between 5 and 10.',
|
|
min = 5,
|
|
max = 10
|
|
)
|
|
],
|
|
default = 7
|
|
)
|
|
|
|
required_text = wtformsparsleyjs.StringField(
|
|
label = 'Required Field',
|
|
validators = [
|
|
validators.DataRequired(
|
|
message = 'Sorry, this is a required field.'
|
|
)
|
|
],
|
|
default = 'Mandatory text'
|
|
)
|
|
|
|
required_select = wtformsparsleyjs.SelectField(
|
|
label = 'Required Select',
|
|
validators = [
|
|
validators.DataRequired(
|
|
message = 'Sorry, you have to make a choice.'
|
|
)
|
|
],
|
|
choices=[
|
|
('', 'Please select an option'),
|
|
('cpp', 'C++'),
|
|
('py', 'Python'),
|
|
('text', 'Plain Text')
|
|
],
|
|
default = 'py'
|
|
)
|
|
|
|
required_checkbox = wtformsparsleyjs.BooleanField(
|
|
label = 'Required Checkbox',
|
|
validators = [
|
|
validators.DataRequired(
|
|
message = 'Sorry, you need to accept this.'
|
|
)
|
|
],
|
|
default = True
|
|
)
|
|
|
|
regexp = wtformsparsleyjs.StringField(
|
|
label = 'Regex-Matched Hex Color-Code',
|
|
validators = [
|
|
validators.Regexp(
|
|
message = 'Not a proper color code, sorry.',
|
|
regex = r'^#[A-Fa-f0-9]{6}$'
|
|
)
|
|
],
|
|
default = '#7D384F'
|
|
)
|
|
|
|
url = wtformsparsleyjs.StringField(
|
|
label = 'URL Field',
|
|
validators = [
|
|
validators.URL(
|
|
message = 'Sorry, this is not a valid URL,'
|
|
)
|
|
],
|
|
default = 'http://example.com/parsley'
|
|
)
|
|
|
|
anyof = wtformsparsleyjs.StringField(
|
|
'Car, Bike or Plane?',
|
|
validators = [
|
|
validators.AnyOf(
|
|
message = 'Sorry, you can only choose from car, bike and plane',
|
|
values = ['car', 'bike', 'plane']
|
|
)
|
|
],
|
|
default = 'car'
|
|
)
|
|
|
|
date_of_birth = wtformsparsleyjs.DateField(
|
|
label = "Date of birth in the format DD-MM-YYYY",
|
|
format = "%d-%m-%Y",
|
|
validators = [
|
|
validators.InputRequired(
|
|
message = "Sorry this input is required."
|
|
)
|
|
],
|
|
default = datetime.datetime.today().date()
|
|
)
|
|
|
|
date_time = wtformsparsleyjs.DateTimeField(
|
|
label = "Date and time in the format DD/MM/YYYY HH:MM",
|
|
format = "%d/%m/%Y %H:%M",
|
|
validators = [
|
|
validators.InputRequired(
|
|
message = "Sorry this input is required."
|
|
)
|
|
],
|
|
default = datetime.datetime.today()
|
|
)
|
|
|
|
length = wtformsparsleyjs.DecimalField(
|
|
label = "Exact length, as a decimal",
|
|
validators = [
|
|
validators.InputRequired(
|
|
message = "Sorry this input is required."
|
|
)
|
|
],
|
|
default = 4.20
|
|
)
|
|
|
|
txt_file = wtformsparsleyjs.FileField(
|
|
label = "Optional file field, of .txt format",
|
|
validators = [
|
|
validators.Regexp(
|
|
r"^.+\.txt$",
|
|
message="Must be a *.txt file"
|
|
),
|
|
validators.Optional()
|
|
]
|
|
)
|
|
|
|
float_field = wtformsparsleyjs.FloatField(
|
|
label = "A float value",
|
|
validators = [
|
|
validators.InputRequired(
|
|
message = "Sorry this input is required."
|
|
)
|
|
],
|
|
default = 4.20
|
|
)
|
|
|
|
best_thing_ever = wtformsparsleyjs.RadioField(
|
|
label = "Is this the best thing ever?",
|
|
choices = [
|
|
("y", "Yes"),
|
|
("n", "No")
|
|
],
|
|
validators = [
|
|
validators.InputRequired(
|
|
message = "We need and answer please."
|
|
)
|
|
],
|
|
default = "y"
|
|
)
|
|
|
|
colour = wtformsparsleyjs.SelectField(
|
|
label = "Select your favourite colour.",
|
|
choices = [
|
|
("red", "Red"),
|
|
("blue", "Blue"),
|
|
("green", "Green")
|
|
],
|
|
validators = [
|
|
validators.InputRequired(
|
|
message = "Sorry this input is required."
|
|
)
|
|
]
|
|
)
|
|
|
|
hobbies = wtformsparsleyjs.SelectMultipleField(
|
|
label = "Select your hobbies: ",
|
|
choices=[
|
|
("cooking", "Cooking"),
|
|
("coding", "Coding"),
|
|
("reading", "Reading"),
|
|
("fishing", "Fishing"),
|
|
("sewing", "Sewing")
|
|
],
|
|
validators = [
|
|
validators.Optional()
|
|
]
|
|
)
|
|
|
|
name = wtformsparsleyjs.StringField(
|
|
label = "Whom would you have me welease?",
|
|
validators = [
|
|
validators.NoneOf(
|
|
["Roger", "Roderick", "Woger", "Woderick"],
|
|
message = "Ah. We have no Woger and no Woderick"
|
|
)
|
|
],
|
|
default = "Brian"
|
|
)
|
|
|
|
hidden = wtformsparsleyjs.HiddenField(
|
|
label = "Hidden value",
|
|
validators = [
|
|
validators.NumberRange(
|
|
min = 5,
|
|
message = "Must be greater than 5"
|
|
)
|
|
],
|
|
default = 6
|
|
)
|
|
|
|
# No default values for passwords, because the aren't rendered as a safety
|
|
# feature.
|
|
secret = wtformsparsleyjs.PasswordField(
|
|
label = "Enter your secret:",
|
|
validators = [
|
|
validators.InputRequired(
|
|
message = "Sorry this input is required."
|
|
)
|
|
],
|
|
)
|
|
|
|
same_secret = wtformsparsleyjs.PasswordField(
|
|
label = "Enter your secret again: ",
|
|
validators = [
|
|
validators.EqualTo(
|
|
fieldname = "secret",
|
|
message = "Secrets do not match."
|
|
)
|
|
],
|
|
)
|
|
|
|
life_story = wtformsparsleyjs.TextAreaField(
|
|
label = "Tell us your life story...",
|
|
validators = [
|
|
validators.Length(
|
|
min = 50,
|
|
message = "C'mon that's not long enough to be a life story"
|
|
)
|
|
],
|
|
default = "This is my life story, it has to be at least 50 characters."
|
|
)
|
|
|
|
url = wtformsparsleyjs.URLField(
|
|
label = "Enter your website: ",
|
|
default = "crashoverhackthemainframe.c"
|
|
)
|
|
|
|
tel = wtformsparsleyjs.TelField(
|
|
label = "Enter your telephone number: ",
|
|
validators = [
|
|
validators.Regexp('^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$',
|
|
message = "Please enter a valid telephone number e.g. +91 (123) 456-7890"
|
|
)
|
|
],
|
|
default = "+91 (123) 456-7890 0000000"
|
|
)
|
|
|
|
search = wtformsparsleyjs.SearchField(
|
|
label = "Enter your search term: ",
|
|
validators = [
|
|
validators.Length(
|
|
max = 10,
|
|
message = "Search query too long it almost killed our server"
|
|
)
|
|
],
|
|
default = "How can mirrors be real when our eyes arn't real?"
|
|
)
|
|
|
|
decimal_range = wtformsparsleyjs.DecimalRangeField(
|
|
label = "Enter your favorite decimal: ",
|
|
validators = [
|
|
validators.NumberRange(
|
|
message = "That's not your favourite number, it's between 0 and 50",
|
|
min = 0,
|
|
max = 50
|
|
)
|
|
],
|
|
default = 70,
|
|
)
|
|
|
|
ineger_range = wtformsparsleyjs.IntegerRangeField(
|
|
label = "Enter your age (you must be over 18): ",
|
|
validators = [
|
|
validators.NumberRange(
|
|
message = "That's not your age, it's between 3 and 5",
|
|
min = 3,
|
|
max = 5
|
|
),
|
|
],
|
|
default = 18
|
|
)
|