Blame view

flaskr/forms.py 3.45 KB
c81df6e7   Goutte   Add the forms mod...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
from flask_wtf import Form
from wtforms import \
    StringField, \
    PasswordField, \
    TextAreaField, \
    BooleanField
from wtforms import validators

from .models import User


# ESTIMATION FORM #############################################################

class EstimateForm(Form):
    email = StringField(
        label=u"Email Address",
        description=u"Make sure you provide a valid address "
                    u"or you won't receive the results.",
        validators=[
            validators.DataRequired(),
            validators.Email(),
        ],
    )
    first_name = StringField(
        label=u"First Name",
        description=u"Also known as given name, eg. `Didier`.",
        validators=[
            validators.Optional(),
            validators.Length(max=1024),
        ],
    )
    last_name = StringField(
        label=u"Last Name",
        description=u"Also known as family name, eg. `Barret`.",
        validators=[
            validators.Optional(),
            validators.Length(max=1024),
        ],
    )
    institution = StringField(
        label=u"Institution / Enterprise",
        description=u"If any.",
        validators=[
            validators.Optional(),
            validators.Length(max=1024),
        ],
    )
    comment = TextAreaField(
        label=u"Leave a comment",
        description=u"Any input is appreciated.  Everyone's a critic.",
        validators=[
            validators.Optional(),
            validators.Length(max=2048),
        ],
    )
    origin_addresses = TextAreaField(
        label=u"Origin Cities",
        description=u"One address per line, in the form `City, Country`. "
                    u"Make sure your addresses are correctly spelled.",
        validators=[
            validators.DataRequired(),
        ],
    )
    destination_addresses = TextAreaField(
        label=u"Destination Cities",
        description=u"One address per line, in the form `City, Country`. "
                    u"Make sure your addresses are correctly spelled.",
        validators=[
            validators.DataRequired(),
        ],
    )
    should_compute_optimal_destination = BooleanField(
        label=u"Compute the destination city "
              u"that will minimize emissions? <br>"
              u"(useful when setting up a meeting/conference)",
        description=u"",
        default=False,
        validators=[
            validators.Optional(),
        ],
    )

    def validate(self):
        check_validate = super(EstimateForm, self).validate()

        # Do our validators pass?
        if not check_validate:
            return False

        return True


# LOGIN FORM ##################################################################

class LoginForm(Form):
    username = StringField(u'Username', validators=[validators.required()])
    password = PasswordField(u'Password', validators=[validators.optional()])

    def validate(self):
        check_validate = super(LoginForm, self).validate()

        # Do our validators pass?
        if not check_validate:
            return False

        # Does the user even exist?
        user = User.query.filter_by(username=self.username.data).first()
        if not user:
            self.username.errors.append('Invalid username or password')
            return False

        # Do the passwords match?
        if not user.check_password(self.password.data):
            self.username.errors.append('Invalid username or password')
            return False

        return True