Get project working locally

This commit is contained in:
Peter Stockings
2024-12-24 00:57:08 +11:00
parent d4fc1868ab
commit 11239fd4f5
22 changed files with 1214 additions and 14 deletions

100
app/forms.py Normal file
View File

@@ -0,0 +1,100 @@
from typing import Optional
from flask_wtf import FlaskForm
from wtforms import BooleanField, FileField, StringField, PasswordField, SubmitField, IntegerField, DateTimeLocalField
from wtforms.validators import DataRequired, Length, EqualTo, ValidationError, Email, Optional, NumberRange
from app.models import User
from datetime import datetime
class SignupForm(FlaskForm):
username = StringField(
'Username',
validators=[
DataRequired(),
Length(min=4, max=20, message="Username must be between 4 and 20 characters.")
]
)
password = PasswordField(
'Password',
validators=[
DataRequired(),
Length(min=6, message="Password must be at least 6 characters long.")
]
)
confirm_password = PasswordField(
'Confirm Password',
validators=[
DataRequired(),
EqualTo('password', message="Passwords must match.")
]
)
submit = SubmitField('Sign Up')
# Custom validator to check if username is already taken
def validate_username(self, username):
user = User.query.filter_by(username=username.data).first()
if user:
raise ValidationError("Username is already taken. Please choose a different one.")
class LoginForm(FlaskForm):
username = StringField(
'Username',
validators=[DataRequired(message="Username is required.")]
)
password = PasswordField(
'Password',
validators=[DataRequired(message="Password is required.")]
)
submit = SubmitField('Login')
class ReadingForm(FlaskForm):
timestamp = DateTimeLocalField(
'Timestamp',
format='%Y-%m-%dT%H:%M',
default=datetime.now, # Set default to current time
validators=[DataRequired(message="Timestamp is required.")]
)
systolic = IntegerField(
'Systolic (mmHg)',
validators=[
DataRequired(),
NumberRange(min=50, max=250, message="Systolic pressure must be between 50 and 250 mmHg.")
]
)
diastolic = IntegerField(
'Diastolic (mmHg)',
validators=[
DataRequired(),
NumberRange(min=30, max=150, message="Diastolic pressure must be between 30 and 150 mmHg.")
]
)
heart_rate = IntegerField(
'Heart Rate (bpm)',
validators=[
DataRequired(),
NumberRange(min=30, max=200, message="Heart rate must be between 30 and 200 bpm.")
]
)
submit = SubmitField('Save Reading')
class DeleteForm(FlaskForm):
submit = SubmitField('Delete')
class ProfileForm(FlaskForm):
name = StringField('Name', validators=[Optional()])
email = StringField('Email', validators=[Optional(), Email()])
profile_pic = FileField('Profile Picture (optional)')
systolic_threshold = IntegerField(
'Systolic Threshold (mmHg)',
validators=[Optional(), NumberRange(min=90, max=200)]
)
diastolic_threshold = IntegerField(
'Diastolic Threshold (mmHg)',
validators=[Optional(), NumberRange(min=60, max=120)]
)
dark_mode = BooleanField('Enable Dark Mode')
submit = SubmitField('Save Settings')