Source code for app.classes
from flask_login import UserMixin
from werkzeug.security import check_password_hash
from werkzeug.security import generate_password_hash
from wtforms.fields import StringField, SelectField,\
SubmitField, PasswordField, FieldList, DateField, RadioField
from wtforms.fields.html5 import EmailField
from wtforms import validators
from flask_wtf import FlaskForm
from app import db, login_manager
[docs]class SurveyForm(FlaskForm):
""" User survey information """
username_entry = StringField("Username",
[validators.InputRequired(
"Please enter a username:")])
password_entry = PasswordField("Password",
[validators.InputRequired(
"Please enter a password:")])
first_name_entry = StringField("First Name",
[validators.InputRequired(
"Please enter your first name:")])
last_name_entry = StringField("Last Name",
[validators.InputRequired(
"Please enter your last name:")])
email_entry = EmailField("Email", [validators.InputRequired(
"Please enter your email address."),
validators.Email(
"Please enter your email address.")])
age_entry = SelectField('Age',
choices=[('under18', 'Under 18'),
('18_24', '18 - 24'),
('25_34', '25 - 34'),
('35_44', '35 - 44'),
('45_54', '45 - 54'),
('55_64', '55 - 64'),
('65_74', '65 - 74'),
('75_84', '75 - 84'),
('older_85', '85 or older')],
validators=[validators.InputRequired(
"Please enter a choice")])
food_entry = SelectField('Rate your interest' +
' in "Food and Drinks" experiences: ',
choices=[("5", 'Very Interested'),
("4", 'Interested'),
("3",
'Neither'),
("2", 'Not really interested'),
("1", 'Not interested at all')],
validators=[validators.InputRequired(
"Please enter a choice")])
nightlife_entry = SelectField('Rate your interest ' +
'in "Night Life" experiences: ',
choices=[("5",
'Very Interested'),
("4", 'Interested'),
("3",
'Neither'),
("2", 'Not really interested'),
("1", 'Not interested at all')],
validators=[validators.InputRequired(
"Please enter a choice")])
nature_entry = SelectField('Rate your interest in "Nature" ' +
'experiences: ',
choices=[("5", 'Very Interested'),
("4", 'Interested'),
("3",
'Neither'),
("2", 'Not really interested'),
("1", 'Not interested at all')],
validators=[validators.InputRequired(
"Please enter a choice")])
museums_entry = SelectField('Rate your interest in visiting museums: ',
choices=[("5", 'Very Interested'),
("4", 'Interested'),
("3",
'Neither'),
("2", 'Not really interested'),
("1", 'Not interested at all')],
validators=[validators.InputRequired(
"Please enter a choice")])
landmarks_entry = SelectField('Rate your interest in visiting landmarks: ',
choices=[("5", 'Very Interested'),
("4", 'Interested'),
("3",
'Neither'),
("2", 'Not really interested'),
("1", 'Not interested at all')],
validators=[validators.InputRequired(
"Please enter a choice")])
music_entry = SelectField('Rate your interest in listening to concerts: ',
choices=[("5", 'Very Interested'),
("4", 'Interested'),
("3",
'Neither'),
("2", 'Not really interested'),
("1", 'Not interested at all')],
validators=[validators.InputRequired(
"Please enter a choice")])
performing_entry =\
SelectField('Rate your interest in Performing & Visual Arts: ',
choices=[("5", 'Very Interested'),
("4", 'Interested'),
("3",
'Neither'),
("2", 'Not really interested'),
("1", 'Not interested at all')],
validators=[validators.InputRequired(
"Please enter a choice")])
submit = SubmitField("Submit")
[docs]class LoginForm(FlaskForm):
"""Log in fields"""
username_entry =\
StringField("Username",
[validators.InputRequired(
"Please enter a username:")])
password_entry =\
PasswordField("Password",
validators=[validators.InputRequired(
"Please enter a password:")])
submit = SubmitField("Submit")
[docs]class User(db.Model, UserMixin):
"""User object"""
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(80), unique=True, nullable=False)
first_name = db.Column(db.String(80), unique=False, nullable=False)
last_name = db.Column(db.String(80), unique=False, nullable=False)
age = db.Column(db.String(80), unique=False, nullable=False)
food = db.Column(db.Integer, unique=False, nullable=False)
nightlife = db.Column(db.Integer, unique=False, nullable=False)
museums = db.Column(db.Integer, unique=False, nullable=False)
nature = db.Column(db.Integer, unique=False, nullable=False)
landmarks = db.Column(db.Integer, unique=False, nullable=False)
music = db.Column(db.Integer, unique=False, nullable=False)
performing = db.Column(db.Integer, unique=False, nullable=False)
password_hash = db.Column(db.String(120), nullable=False)
def __init__(self, username, email, password,
first_name, last_name, age,
food, nightlife, museums, nature,
landmarks, music, performing):
self.username = username
self.email = email
self.set_password(password)
self.first_name = first_name
self.last_name = last_name
self.age = age
self.food = food
self.nightlife = nightlife
self.museums = museums
self.nature = nature
self.landmarks = landmarks
self.music = music
self.performing = performing
[docs]class TripForm(FlaskForm):
"""Trip survey information """
name_entry =\
StringField("Trip Name",
validators=[validators.InputRequired(
"Please enter a name for your trip:")])
where_entry =\
StringField("Where",
validators=[validators.InputRequired(
"Where are you going?")])
start_date_entry =\
DateField("Start Date",
validators=[validators.InputRequired("Start Date")],
format='%m-%d-%Y')
end_date_entry = DateField("End Date",
format='%m-%d-%Y')
# new field for adding users on trips by email
party = StringField('party')
submit = SubmitField("Submit")
[docs]class Trip(db.Model, UserMixin):
"""Trip object"""
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=False, nullable=False)
where = db.Column(db.String(80), unique=False, nullable=False)
creator = db.Column(db.String(80), unique=False, nullable=False)
# invite_list = db.Column(db.String(80), unique=False, nullable=False)
start_date = db.Column(db.Date(), unique=False, nullable=False)
end_date = db.Column(db.Date(), unique=False, nullable=False)
def __init__(self, name, where, start_date, end_date, creator):
self.name = name
self.where = where
self.creator = creator
# self.invite_list = invite_list
self.start_date = start_date
self.end_date = end_date
db.create_all()
db.session.commit()
# user_loader :
# This callback is used to reload the user object
# from the user ID stored in the session.
[docs]@login_manager.user_loader
def load_user(id):
"""load current user based on their ID"""
return User.query.get(int(id))