Exemplo n.º 1
0
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'])
Exemplo n.º 2
0
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