Updated sample

This commit is contained in:
James O'Toole
2015-02-26 01:46:55 +00:00
parent 2eb9929216
commit 6e9bbafbe1
7 changed files with 2414 additions and 58 deletions
+281 -43
View File
@@ -2,7 +2,8 @@ __author__ = 'Johannes Gehrs (jgehrs@gmail.com)'
from flask import Flask, render_template, request
from wtforms import Form, validators
from wtformsparsleyjs import IntegerField, BooleanField, SelectField, StringField
import wtformsparsleyjs
import datetime
app = Flask(__name__)
@@ -15,46 +16,283 @@ def parsley_testform():
class ParsleyTestForm(Form):
email = StringField('E-Mail Address', [
validators.Email('Sorrry, not a valid email address.')
], default='test@example.com')
first_value = StringField('Some Value', default='Some value')
second_value = StringField('Should be identical', [
validators.EqualTo(message='Sorry, values do not match.',
fieldname='first_value')
], default='Some value')
ip_address = StringField('IP4 Address', [
validators.IPAddress(message='Sorry, not a valid IP4 Address.')
], default='127.0.0.1')
string_length = StringField('Length of String (5 to 10)', [
validators.Length(message='Length should be between 5 and 10 characters.',
min=5, max=10)
], default='Hello!')
number_range = IntegerField('Number Range (5 to 10)', [
validators.NumberRange(message='Range should be between 5 and 10.',
min=5, max=10)
], default=7)
email = wtformsparsleyjs.StringField(
label = 'E-Mail Address',
validators = [
validators.Email(
message = 'Sorrry, not a valid email address.'
)
],
default='test@example.com'
)
required_text = StringField('Required Field', [
validators.DataRequired(message='Sorry, this is a required field.')
], default='Mandatory text')
required_select = SelectField('Required Select', [
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 = BooleanField('Required Checkbox', [
validators.DataRequired(message='Sorry, you need to accept this.')
], default=True)
regexp = StringField('Regex-Matched Hex Color-Code', [
validators.Regexp(message='Not a proper color code, sorry.',
regex=r'^#[A-Fa-f0-9]{6}$')
], default='#7D384F')
url = StringField('URL Field', [
validators.URL(message='Sorry, this is not a valid URL,')
], default='http://example.com/parsley')
anyof = StringField('Car, Bike or Plane?', [
validators.AnyOf(message='Sorry, you can only choose from car, bike and plane',
values=['car', 'bike', 'plane'])
], default='car')
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, becuase 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."
)
@@ -0,0 +1,5 @@
$(document).ready(function() {
window.ParsleyValidator.addValidator('anyof', function (value, array) {
return array.indexOf(value) >= 0;
}, 32).addMessage('en', 'anyof', 'The value you have given is not a listed option.')
});
@@ -0,0 +1,32 @@
$(document).ready(function() {
window.ParsleyValidator.addValidator('datefield', function (str, format) {
/**
* Modified version of micro-strptime.js.
* https://github.com/cho45/micro-strptime.js
*/
if (!format) throw Error("Missing format");
fds = {
'%': '%',
'A': '[a-z]+',
'B': '[a-z]+',
'Y': '[0-9]{4}',
'm': '[0-9]{1,2}',
'd': '[0-9]{1,2}',
'H': '[0-9]{1,2}',
'M': '[0-9]{1,2}',
'S': '[0-9]{1,2}',
's': '[0-9]+',
'Z': 'UTC|Z|[+-][0-9][0-9]:?[0-9][0-9]',
'I': '[0-9]{1,2}',
'p': 'AM|PM'
};
// Create a regular expression from the format string, that matches a string of that format.
var re = new RegExp(format.replace(/%(?:([a-zA-Z%])|('[^']+')|("[^"]+"))/g, function (_, a, b, c) {
var fd = a || b || c;
var d = fds[fd];
if (!d) throw Error("Unknown format descripter: " + fd);
return '(' + d + ')';
}), 'i');
return re.test(str);
}, 32).addMessage('en', 'datefield', 'The input needs to be in the correct date format.')
});
@@ -0,0 +1,5 @@
$(document).ready(function() {
window.ParsleyValidator.addValidator('noneof', function (value, array) {
return array.indexOf(value) === -1;
}, 32).addMessage('en', 'noneof', 'You have entered a value which is not allowed.')
});
File diff suppressed because it is too large Load Diff
+4 -2
View File
@@ -45,8 +45,10 @@
{% block scripts %}
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script src="{{ url_for('static', filename='scripts/parsleyjs/parsley.js') }}"></script>
<script src="{{ url_for('static', filename='scripts/parsleyjs/parsley.extend.js') }}"></script>
<script src="{{ url_for('static', filename='scripts/parsley.js') }}"></script>
<script src="{{ url_for('static', filename='scripts/parsley-noneof.js') }}"></script>
<script src="{{ url_for('static', filename='scripts/parsley-anyof.js') }}"></script>
<script src="{{ url_for('static', filename='scripts/parsley-datefield.js') }}"></script>
<script>$('form').parsley({ successClass: 'success', errorClass: 'error',
errors: {
classHandler: function (element) {
@@ -5,19 +5,10 @@
{% from "_formhelpers.html" import render_field, render_checkbox %}
<form method=post action="{{ url_for('parsley_testform') }}">
<fieldset>
{{ render_field(form.email) }}
{{ render_field(form.first_value) }}
{{ render_field(form.second_value) }}
{{ render_field(form.ip_address) }}
{{ render_field(form.string_length) }}
{{ render_field(form.number_range) }}
{{ render_field(form.required_text) }}
{{ render_field(form.required_select) }}
{{ render_field(form.required_checkbox) }}
{{ render_field(form.regexp) }}
{{ render_field(form.url) }}
{{ render_field(form.anyof) }}
{% for field in form %}
{{ render_field(field) }}
{% endfor %}
<p><input type=submit value=Submit>
</fieldset>
</form>
{% endblock content %}
{% endblock content %}