flask site buildout #2
@ -1,3 +1,3 @@
|
||||
FLASK_APP=microblog.py
|
||||
FLASK_DEBUG=0
|
||||
FLASK_DEBUG=1
|
||||
|
||||
|
@ -11,7 +11,7 @@ RUN target=/root/.cache/pip \
|
||||
# Need to make this explicit as part of expansion, no migrations or venv
|
||||
COPY . .
|
||||
|
||||
#ENV FLASK_APP app.py
|
||||
ENV FLASK_APP microblog.py
|
||||
|
||||
# This might be scary to leave on
|
||||
#ENV FLASK_ENV development
|
||||
|
@ -54,6 +54,9 @@ Dockerfile needs dockerignore or preferably explicitly defined copies for:
|
||||
- requirements
|
||||
- not dotflaskenv, vars set with dockerfile
|
||||
|
||||
## docker setup:
|
||||
- py logger handler StreamHandler is buggy to the point of being useless. Use logfile and link to stdout in Docker build
|
||||
|
||||
## notes:
|
||||
- compose has entry that overrides flask with uwsgi for prod
|
||||
- miminal environment vars come through project env, pass through compose
|
||||
|
@ -3,7 +3,7 @@ from config import Config
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
from flask_migrate import Migrate
|
||||
from flask_login import LoginManager
|
||||
import logging
|
||||
import logging, sys
|
||||
from logging.handlers import SMTPHandler
|
||||
|
||||
app = Flask(__name__)
|
||||
@ -13,5 +13,25 @@ migrate = Migrate(app, db)
|
||||
login = LoginManager(app)
|
||||
login.login_view = 'login'
|
||||
|
||||
if not app.debug:
|
||||
if app.config['MAIL_SERVER']:
|
||||
auth = None
|
||||
secure = None
|
||||
mail_handler = SMTPHandler(
|
||||
mailhost=(app.config['MAIL_SERVER'], app.config['MAIL_PORT']),
|
||||
fromaddr=app.config['FROM_ADDRESS'],
|
||||
toaddrs=app.config['ADMINS'], subject='MB failure.',
|
||||
credentials=auth, secure=secure)
|
||||
mail_handler.setLevel(logging.ERROR)
|
||||
app.logger.addHandler(mail_handler)
|
||||
|
||||
if app.config['DC_LOGGING']:
|
||||
print('#################### DEBUGHERE', file=sys.stderr)
|
||||
dclog = logging.StreamHandler(stream=sys.stderr)
|
||||
dclog.setLevel(logging.INFO)
|
||||
dclog.propagate = False
|
||||
app.logger.addHandler(dclog)
|
||||
|
||||
|
||||
from app import routes, models, errors
|
||||
|
||||
|
@ -32,3 +32,17 @@ class EditProfileForm(FlaskForm):
|
||||
username = StringField('Username', validators=[DataRequired()])
|
||||
about_me = TextAreaField('About me', validators=[Length(min=0, max=140)])
|
||||
submit = SubmitField('Update')
|
||||
|
||||
def __init__(self, original_username, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.original_username = original_username
|
||||
|
||||
def validate_username(self, username):
|
||||
if username.data != self.original_username:
|
||||
user = db.session.scalar(sa.select(User).where(User.username == username.data))
|
||||
if user is not None:
|
||||
raise ValidationError('Please use a different username.')
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -18,6 +18,7 @@ def before_request():
|
||||
@app.route('/index')
|
||||
@login_required
|
||||
def index():
|
||||
app.logger.info("AAAAAAAAAAAAAAAAAAAAA")
|
||||
|
||||
user = {'username': 'Finnaa'}
|
||||
posts = [
|
||||
@ -74,6 +75,7 @@ def register():
|
||||
@login_required
|
||||
def user(username):
|
||||
user = db.first_or_404(sa.select(User).where(User.username == username))
|
||||
#app.logger.info('PROFILE DEBUG ###############################')
|
||||
posts = [
|
||||
{'author': user, 'body': 'Test1'},
|
||||
{'author': user, 'body': 'Test2?'}
|
||||
@ -83,7 +85,7 @@ def user(username):
|
||||
@app.route('/edit_profile', methods=['GET', 'POST'])
|
||||
@login_required
|
||||
def edit_profile():
|
||||
form = EditProfileForm()
|
||||
form = EditProfileForm(current_user.username)
|
||||
if form.validate_on_submit():
|
||||
current_user.username = form.username.data
|
||||
current_user.about_me = form.about_me.data
|
||||
|
@ -5,14 +5,18 @@ basedir = os.path.abspath(os.path.dirname(__file__))
|
||||
|
||||
class Config:
|
||||
SECRET_KEY = os.environ.get('FLASK_SECRET_KEY') or 'flasksk'
|
||||
#SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'zapp.db')
|
||||
SQLALCHEMY_DATABASE_URI = 'mariadb+mariadbconnector://flasku:' + os.environ.get('MYSQL_PASSWORD') + '@db:3306/flask'
|
||||
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'zapp.db')
|
||||
#SQLALCHEMY_DATABASE_URI = 'mariadb+mariadbconnector://flasku:' + os.environ.get('MYSQL_PASSWORD') + '@db:3306/flask'
|
||||
|
||||
MAIL_SERVER = 'pmb'
|
||||
#MAIL_SERVER = 'pmb'
|
||||
MAIL_SERVER = ''
|
||||
MAIL_PORT = 25
|
||||
MAIL_USE_TLS = False
|
||||
MAIL_USERNAME = ''
|
||||
MAIL_PASSWORD = ''
|
||||
ADMINS = [os.environ.get('ADMIN_EMAIL')]
|
||||
FROM_ADDRESS = os.environ.get('FROM_ADDRESS')
|
||||
|
||||
DC_LOGGING = True
|
||||
|
||||
|
||||
|
@ -21,4 +21,5 @@ SQLAlchemy==2.0.31
|
||||
typing_extensions==4.12.2
|
||||
Werkzeug==3.0.3
|
||||
WTForms==3.1.2
|
||||
uwsgi
|
||||
mariadb
|
||||
|
@ -38,6 +38,7 @@ services:
|
||||
- TOKEN_I=${DOTENV_TOKEN_I}
|
||||
- TOKEN_C=${DOTENV_TOKEN_C}
|
||||
- ADMIN_EMAIL=${ADMIN_EMAIL}
|
||||
- FROM_ADDRESS=${GITEA_MAIL_FROM}
|
||||
#ports:
|
||||
# - 8000:8000
|
||||
expose:
|
||||
|
@ -37,6 +37,8 @@ services:
|
||||
- MYSQL_PASSWORD=${DOTENV_MYSQL_FLASK_PASSWORD}
|
||||
- TOKEN_I=${DOTENV_TOKEN_I}
|
||||
- TOKEN_C=${DOTENV_TOKEN_C}
|
||||
- ADMIN_EMAIL=${ADMIN_EMAIL}
|
||||
- FROM_ADDRESS=${GITEA_MAIL_FROM}
|
||||
#ports:
|
||||
# - 8000:8000
|
||||
expose:
|
||||
|
@ -3,7 +3,7 @@ services:
|
||||
image: mariadb:lts
|
||||
restart: always
|
||||
healthcheck:
|
||||
#10-focal test: ['CMD-SHELL', 'mysqladmin ping -h 127.0.0.1 --password="${DOTENV_MYSQL_ROOT_PASSWORD}" --silent']
|
||||
#test: ['CMD-SHELL', 'mysqladmin ping -h 127.0.0.1 --password="${DOTENV_MYSQL_ROOT_PASSWORD}" --silent']
|
||||
test: ['CMD', 'healthcheck.sh', '--connect', '--innodb_initialized']
|
||||
interval: 10s
|
||||
retries: 5
|
||||
@ -37,6 +37,8 @@ services:
|
||||
- MYSQL_PASSWORD=${DOTENV_MYSQL_FLASK_PASSWORD}
|
||||
- TOKEN_I=${DOTENV_TOKEN_I}
|
||||
- TOKEN_C=${DOTENV_TOKEN_C}
|
||||
- ADMIN_EMAIL=${ADMIN_EMAIL}
|
||||
- FROM_ADDRESS=${GITEA_MAIL_FROM}
|
||||
#ports:
|
||||
# - 8000:8000
|
||||
expose:
|
||||
|
Loading…
Reference in New Issue
Block a user