“shubhamdhamal”
Deploy Flask app with Docker
7644eac
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, BooleanField, SubmitField, SelectField, HiddenField
from wtforms.validators import DataRequired, Email, EqualTo, Length, ValidationError, Regexp
from web_app.models import User # Assuming models.py is in web_app
import random
import string
from datetime import datetime
class LoginForm(FlaskForm):
email = StringField('Email', validators=[DataRequired(), Email()])
password = PasswordField('Password', validators=[DataRequired()])
remember_me = BooleanField('Remember Me')
login_method = HiddenField(default='password')
login_time = HiddenField(default=lambda: datetime.utcnow().strftime('%H:%M'))
submit = SubmitField('Sign In')
def get_greeting(self):
"""Returns a time-appropriate greeting"""
hour = datetime.utcnow().hour
if hour < 12:
return "Good morning!"
elif hour < 18:
return "Good afternoon!"
else:
return "Good evening!"
def get_motivation(self):
"""Returns a random motivational message"""
messages = [
"Ready to continue your learning journey?",
"Your AI learning path awaits!",
"Welcome back, knowledge seeker!",
"Let's build your skills today!",
"Time to level up your expertise!"
]
return random.choice(messages)
class RegistrationForm(FlaskForm):
username = StringField('Username',
validators=[DataRequired(),
Length(min=3, max=64),
Regexp('^[A-Za-z0-9_.-]+$',
message='Username can only contain letters, numbers, dots, underscores and dashes')])
email = StringField('Email', validators=[DataRequired(), Email(), Length(max=120)])
password = PasswordField('Password', validators=[DataRequired(), Length(min=8)])
password2 = PasswordField('Repeat Password',
validators=[DataRequired(),
EqualTo('password', message='Passwords must match.')])
password_strength = HiddenField(default='0')
suggested_username = HiddenField()
submit = SubmitField('Join the Learning Community')
def __init__(self, *args, **kwargs):
super(RegistrationForm, self).__init__(*args, **kwargs)
# Generate username suggestions based on email if provided
if 'email' in kwargs.get('data', {}) and kwargs['data']['email']:
email = kwargs['data']['email']
username_base = email.split('@')[0]
self.suggested_username.data = self._generate_username_suggestions(username_base)
def _generate_username_suggestions(self, base):
"""Generate creative username suggestions"""
suggestions = []
# Basic username from email
suggestions.append(base)
# Add a learning-related suffix
learning_suffixes = ['learner', 'student', 'scholar', 'genius', 'explorer']
suggestions.append(f"{base}_{random.choice(learning_suffixes)}")
# Add year
current_year = datetime.utcnow().year
suggestions.append(f"{base}{current_year}")
# Random suffix
random_suffix = ''.join(random.choices(string.digits, k=3))
suggestions.append(f"{base}{random_suffix}")
return suggestions
def get_password_feedback(self, password):
"""Returns helpful feedback about password strength"""
strength = 0
feedback = []
if len(password) >= 12:
strength += 2
feedback.append("Good length!")
elif len(password) >= 8:
strength += 1
if any(c.isupper() for c in password):
strength += 1
feedback.append("Has uppercase")
if any(c.islower() for c in password):
strength += 1
if any(c.isdigit() for c in password):
strength += 1
feedback.append("Has numbers")
if any(c in string.punctuation for c in password):
strength += 1
feedback.append("Has special characters")
strength_labels = {
0: "Very weak",
1: "Weak",
2: "Fair",
3: "Good",
4: "Strong",
5: "Very strong",
6: "Excellent!"
}
return {
"score": strength,
"label": strength_labels.get(strength, "Unknown"),
"feedback": feedback
}
def validate_username(self, username):
# Check if username exists
user = User.query.filter_by(username=username.data).first()
if user is not None:
# Generate alternative suggestions
base = username.data
suggestions = []
# Add random numbers
suggestions.append(f"{base}{random.randint(1, 999)}")
# Add learning-related prefix
prefixes = ['awesome', 'brilliant', 'clever', 'eager']
suggestions.append(f"{random.choice(prefixes)}_{base}")
# Add random suffix
suffixes = ['learner', 'mind', 'thinker', 'pro']
suggestions.append(f"{base}_{random.choice(suffixes)}")
# Format suggestions as a string
suggestion_text = ", ".join(suggestions)
raise ValidationError(f'This username is already taken. How about: {suggestion_text}?')
def validate_email(self, email):
user = User.query.filter_by(email=email.data).first()
if user is not None:
raise ValidationError('This email is already registered. Did you mean to log in instead?')
# Email domain validation with friendly messages
domain = email.data.split('@')[-1].lower()
disposable_domains = ['mailinator.com', 'tempmail.com', 'fakeinbox.com', 'guerrillamail.com']
if domain in disposable_domains:
raise ValidationError('Please use your regular email instead of a temporary one. We promise not to spam you!')
# Generate username suggestions based on email
username_base = email.data.split('@')[0]
self.suggested_username.data = self._generate_username_suggestions(username_base)