import datetime import bcrypt from flask import Flask, render_template, request, jsonify, flash, session, redirect, url_for from flask_admin import Admin from flask_admin.contrib.sqla import ModelView from flask_heroku import Heroku from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) heroku = Heroku(app) heroku.init_app(app) db = SQLAlchemy(app) from app import models db.create_all([None]) username = "" @app.route('/') def index(): if 'username' in session: features = models.Feature.query.filter( models.Feature.assigned == session['username']).order_by( models.Feature.clientPriority.asc()) return render_template('home.html', name=session['username'], features=features) return render_template('index.html') @app.route('/login', methods=['POST'])
def create_app(): app = Flask(__name__, instance_relative_config=True, template_folder="templates", static_url_path="") app.config.from_pyfile("default.py") app.config.from_envvar("APP_CONFIG_FILE", silent=True) heroku = Heroku() heroku.init_app(app) db.init_app(app) migrate = Migrate(compare_type=True) migrate.init_app(app, db) admin = Admin(app) admin.add_view(AdminModelView(Event, db.session)) admin.add_link(MenuLink(name="Website", endpoint="index")) admin.add_link(MenuLink(name="Login", url="/login")) admin.add_link(MenuLink(name="Logout", url='/logout')) user_datastore = SQLAlchemyUserDatastore(db, User, Role) security = Security(app, user_datastore) @app.context_processor def inject_now(): return {'now': datetime.utcnow()} @security.context_processor def security_context_processor(): return dict(admin_base_template=admin.base_template, admin_view=admin.index_view, get_url=url_for, h=helpers) @app.before_first_request def create_user(): role = user_datastore.find_or_create_role("admin") # password = os.environ.get('ADMIN_PASSWORD') if not User.query.filter_by(email=ADMIN_EMAIL).first(): user = user_datastore.create_user(email=ADMIN_EMAIL, password=ADMIN_PASSWORD) user_datastore.add_role_to_user(user, role) db.session.commit() @app.route('/') @app.route('/index') def index(): events = Event.query.filter(Event.date > datetime.utcnow()).order_by( Event.date) return render_template('index.html', events=events) @app.route('/our_work') def our_work(): current = "our_work" return render_template('our_work.html', current=current) @app.route('/signup', methods=['POST']) def signup(): email = request.form.get('email') api_key = os.environ.get('MAILCHIMP_API_KEY') if not api_key or not email: flash( 'Sorry, there was an error during signup. Please come back later and try again!' ) return redirect(url_for('index')) server_number = api_key[-4:] url = f"https://{server_number}.api.mailchimp.com/3.0/lists/{LIST_ID}/members" headers = { 'content-type': 'application/json', 'Authorization': f"Basic {api_key}" } data = {'email_address': email, 'status': 'subscribed'} response = requests.post(url, headers=headers, data=json.dumps(data)) if response.ok or response.json().get('title') == 'Member Exists': flash('Thanks for signing up to our newsletter!') else: flash( 'Sorry, there was an error during signup. Please come back later and try again!' ) return redirect(url_for('index')) return app