示例#1
0
from flask_user import UserManager

user_manager = UserManager(None, None, None)
def create_app():
    """ Flask application factory """

    #ayar yapılandırmamızı içe aktarıyoruz
    app = Flask(__name__)
    app.config.from_object(__name__ + '.ConfigClass')

    db = SQLAlchemy(app)

    #tablolarımızı oluşturuyoruz
    class User(db.Model, UserMixin):

        __tablename__ = 'users'
        kullanici_id = db.Column(db.Integer, primary_key=True)

        email = db.Column(db.String(50), nullable=False, unique=True)
        email_confirmed_at = db.Column(db.DateTime())
        password = db.Column(db.String(50), nullable=False)

        kullanici_adi = db.Column(db.String(50))
        kullanici_soyadi = db.Column(db.String(50))
        kullanici_tcno = db.Column(db.Integer())
        kullanici_telno = db.Column(db.Integer())
        kullanici_puan = db.Column(db.Float(), server_default='0')
        kullanici_rol = db.Column('adminlik', db.Boolean())

        def __init__(self, email, password, kullanici_adi, kullanici_soyadi,
                     kullanici_tcno, kullanici_telno, email_confirmed_at,
                     kullanici_rol):
            self.email = email
            self.password = password
            self.kullanici_adi = kullanici_adi
            self.kullanici_soyadi = kullanici_soyadi
            self.kullanici_tcno = kullanici_tcno
            self.kullanici_telno = kullanici_telno
            self.email_confirmed_at = email_confirmed_at
            self.kullanici_rol = kullanici_rol

    class Otel(db.Model):
        __tablename__ = 'oteller'
        otel_id = db.Column(db.Integer(), primary_key=True)
        otel_adi = db.Column(db.String(100), nullable=False)
        otel_sehir = db.Column(db.Integer(), nullable=False)
        otel_yildizi = db.Column(db.Integer(), nullable=False)

        def __init__(self, otel_adi, otel_sehir, otel_yildizi):
            self.otel_adi = otel_adi
            self.otel_sehir = otel_sehir
            self.otel_yildizi = otel_yildizi

    class Oda(db.Model):
        __tablename__ = 'odalar'
        oda_id = db.Column(db.Integer(), primary_key=True)
        otel_id = db.Column(
            db.Integer, db.ForeignKey('oteller.otel_id', ondelete='CASCADE'))
        oda_adi = db.Column(db.String(50), nullable=False)
        oda_tipi = db.Column(db.String(50), nullable=False)
        oda_fiyat = db.Column(db.Float())
        oda_durum = db.Column(db.Boolean(), server_default='0')

        def __init__(self, otel_id, oda_adi, oda_tipi, oda_fiyat):
            self.otel_id = otel_id
            self.oda_adi = oda_adi
            self.oda_tipi = oda_tipi
            self.oda_fiyat = oda_fiyat

    class Sepet(db.Model):
        __tablename__ = 'sepetler'
        sepet_id = db.Column(db.Integer(), primary_key=True)
        user_id = db.Column(
            db.Integer(),
            db.ForeignKey('users.kullanici_id', ondelete='CASCADE'))
        oda_id = db.Column(db.Integer(),
                           db.ForeignKey('odalar.oda_id', ondelete='CASCADE'))
        otel_id = db.Column(
            db.Integer, db.ForeignKey('oteller.otel_id', ondelete='CASCADE'))
        toplam_tutar = db.Column(db.Float())
        rezerve_tarih = db.Column(db.DateTime(), nullable=False)
        giris_tarih = db.Column(db.Date())
        cikis_tarih = db.Column(db.Date())
        kalinacak_gun = db.Column(db.Integer())
        sepet_durum = db.Column(db.Boolean(), server_default='0')

        def __init__(self, user_id, otel_id, oda_id, toplam_tutar,
                     rezerve_tarih, giris_tarih, cikis_tarih, kalinacak_gun):
            self.user_id = user_id
            self.otel_id = otel_id
            self.oda_id = oda_id
            self.toplam_tutar = toplam_tutar
            self.rezerve_tarih = rezerve_tarih
            self.giris_tarih = giris_tarih
            self.cikis_tarih = cikis_tarih
            self.kalinacak_gun = kalinacak_gun

    user_manager = UserManager(app, db, User)

    #veritabanımızı oluşturuyor ve tablolara erişim
    #için takma isimler veriyoruz
    db.create_all()
    engine = create_engine('sqlite:///otel_rezervasyon.sqlite')
    meta = MetaData(engine, reflect=True)
    table_users = meta.tables['users']
    table_otel = meta.tables['oteller']
    table_oda = meta.tables['odalar']
    table_sepet = meta.tables['sepetler']

    #sistemde admin kayıtlı değilse bir admin oluşturuyoruz
    if not User.query.filter(User.email == '*****@*****.**').first():
        #şifremizi hashli bir şekilde tutmak için fonksiyona tabi tutuyoruz
        tmp_psw = '12345678'
        tmp_psw = hashlib.md5(tmp_psw.encode())
        tmp_psw = tmp_psw.hexdigest()

        user = User(email='*****@*****.**',
                    password=tmp_psw,
                    email_confirmed_at=datetime.datetime.utcnow(),
                    kullanici_adi=None,
                    kullanici_soyadi=None,
                    kullanici_tcno=None,
                    kullanici_telno=None,
                    kullanici_rol=1)
        db.session.add(user)
        db.session.commit()

    #anasayfaya yönlendirme fonksiyonumuzu oluşturuyoruz
    @app.route('/')
    def home_page():
        return render_template("index.html")

    #giriş yap fonksiyonumuzu oluşturuyoruz
    #formdan gelen verileri veritabanındaki
    #
    @app.route('/login', methods=['GET', 'POST'])
    def login():
        if request.method == 'POST':
            email = request.form['email']
            tmp_psw = request.form['password']
            tmp_psw = hashlib.md5(tmp_psw.encode())
            tmp_psw = tmp_psw.hexdigest()
            password = tmp_psw

            try:
                sorgu1 = User.query.filter_by(email=email,
                                              password=password).first()
                if sorgu1 is not None:

                    global sorgu_kullanici_id
                    conn = engine.connect()
                    select_st = select([table_users.c.kullanici_id
                                        ]).where(table_users.c.email == email)
                    sorgu_kullanici_id = conn.execute(select_st).scalar()

                    sorgu2 = User.query.filter_by(email=email,
                                                  password=password,
                                                  kullanici_rol=1).first()
                    if sorgu2 is not None:
                        session['admin'] = True

                    session['logged_in'] = True
                    flash('Hoşgeldiniz')

                    return redirect(url_for('home_page'))
                else:
                    flash('Kullanıcı adı veya şifre yanlış')
                    return redirect(url_for('home_page'))
            except:
                flash('Beklenmeyen bir hata oluştu!')
                return redirect(url_for('home_page'))

        else:
            return redirect(url_for('home_page'))

    @app.route('/rezerve_login', methods=['GET', 'POST'])
    def rezerve_login():
        if request.method == 'POST':
            email = request.form['email']
            tmp_psw = request.form['password']
            tmp_psw = hashlib.md5(tmp_psw.encode())
            tmp_psw = tmp_psw.hexdigest()
            password = tmp_psw

            try:
                sorgu1 = User.query.filter_by(email=email,
                                              password=password).first()
                if sorgu1 is not None:
                    global sorgu_kullanici_id
                    conn = engine.connect()
                    select_st = select([table_users.c.kullanici_id
                                        ]).where(table_users.c.email == email)
                    sorgu_kullanici_id = conn.execute(select_st).scalar()

                    sorgu2 = User.query.filter_by(email=email,
                                                  password=password,
                                                  kullanici_rol=1).first()
                    if sorgu2 is not None:
                        session['admin'] = True

                    session['logged_in'] = True
                    flash('Hoşgeldiniz')

                    return redirect(url_for('rezerve'))
                else:
                    flash('Kullanıcı adı veya şifre yanlış')
                    return redirect(url_for('rezerve'))
            except:
                flash('Beklenmeyen bir hata oluştu!')
                return redirect(url_for('rezerve'))

        else:
            return redirect(url_for('rezerve'))

    @app.route("/logout")
    @login_required
    def logout():
        conn = engine.connect()
        select_st = table_sepet.delete().where(
            and_(table_sepet.c.user_id == sorgu_kullanici_id,
                 table_sepet.c.sepet_durum == 0))
        conn.execute(select_st)
        session.clear()
        flash("Başarı ile çıkış yaptınız.")

        return redirect(url_for('home_page'))

    @app.route('/', methods=['GET', 'POST'])
    def uye_ol():
        if request.method == 'POST':
            tmp_psw = request.form['parola']
            tmp_psw = hashlib.md5(tmp_psw.encode())
            tmp_psw = tmp_psw.hexdigest()
            password = tmp_psw
            try:
                new_user = User(kullanici_tcno=request.form['tcno'],
                                kullanici_adi=request.form['adi'],
                                kullanici_soyadi=request.form['soyadi'],
                                kullanici_telno=request.form['telno'],
                                email=request.form['email'],
                                password=password,
                                kullanici_rol=0,
                                email_confirmed_at=datetime.datetime.utcnow())

                db.session.add(new_user)
                db.session.commit()
                flash("Kayıt başarı ile eklendi")
            except:
                flash("Kayıt işlemi sırasında hata oluştu")

            finally:
                return redirect(url_for('home_page'))

    @app.route('/uye_gor', methods=['GET', 'POST'])
    @login_required
    @admin_required
    def uye_gor():
        conn = engine.connect()
        select_st = select([
            table_users.c.kullanici_id, table_users.c.kullanici_adi,
            table_users.c.kullanici_soyadi, table_users.c.kullanici_tcno,
            table_users.c.email, table_users.c.kullanici_telno
        ]).where(table_users.c.adminlik == 0)
        rows = conn.execute(select_st)

        return render_template("uye_gor.html", rows=rows)

    @app.route('/uye_sil/<id>')
    @login_required
    @admin_required
    def uye_sil(id=0):
        conn = engine.connect()
        select_st = table_users.delete().where(
            table_users.c.kullanici_id == id)
        rows = conn.execute(select_st)

        return redirect(url_for('uye_gor'))

    @app.route('/otel_listele', methods=['GET', 'POST'])
    @login_required
    @admin_required
    def otel_listele():
        if request.method == 'POST':
            new_otel = Otel(otel_adi=request.form['oteladi'],
                            otel_sehir=request.form['otelsehir'],
                            otel_yildizi=request.form['otelyildizi'])

            db.session.add(new_otel)
            db.session.commit()
            return redirect(url_for('otel_listele'))

        conn = engine.connect()
        select_st = select([
            table_otel.c.otel_id, table_otel.c.otel_adi,
            table_otel.c.otel_sehir, table_otel.c.otel_yildizi
        ])
        rows = conn.execute(select_st)
        return render_template("otel_listele.html", rows=rows)

    @app.route('/otel_duzenle/<id>', methods=['GET', 'POST'])
    @login_required
    @admin_required
    def otel_duzenle(id=0):
        if request.method == 'POST':
            otel_adi = request.form['oteladi']
            otel_sehir = request.form['otelsehir']
            otel_yildizi = request.form['otelyildizi']
            conn = engine.connect()
            select_st1 = table_otel.update().where(
                table_otel.c.otel_id == id).values(otel_adi=otel_adi,
                                                   otel_sehir=otel_sehir,
                                                   otel_yildizi=otel_yildizi)
            conn.execute(select_st1)
            return redirect(url_for('otel_listele'))
        else:
            conn = engine.connect()
            select_st2 = select([
                table_otel.c.otel_adi, table_otel.c.otel_sehir,
                table_otel.c.otel_yildizi
            ]).where(table_otel.c.otel_id == id)
            rows = conn.execute(select_st2)
            return render_template("otel_duzenle.html",
                                   tmp_otel_id=id,
                                   rows=rows)

    @app.route('/otel_sil/<id>')
    @login_required
    @admin_required
    def otel_sil(id=0):
        conn = engine.connect()
        select_st = table_otel.delete().where(table_otel.c.otel_id == id)
        rows = conn.execute(select_st)

        return redirect(url_for('otel_listele'))

    @app.route('/oda_listele', methods=['GET', 'POST'])
    @login_required
    @admin_required
    def oda_listele():
        if request.method == 'POST':
            if request.form['btn'] == 'Ekle':
                try:
                    new_oda = Oda(otel_id=request.form['id'],
                                  oda_adi=request.form['odaadi'],
                                  oda_tipi=request.form['odatipi'],
                                  oda_fiyat=request.form['odafiyat'])

                    db.session.add(new_oda)
                    db.session.commit()
                    flash("Kayıt başarı ile eklendi")
                    return redirect(url_for('oda_listele'))
                except:
                    flash("Kayıt işlemi sırasında hata oluştu")
            elif request.form['btn'] == 'Seç':
                otel_id = request.form['otel_id']
                conn = engine.connect()
                select_st = select(
                    [table_otel.c.otel_id, table_otel.c.otel_adi])
                rows_otel = conn.execute(select_st)

                select_st1 = select([
                    table_oda.c.oda_id, table_oda.c.oda_adi,
                    table_oda.c.otel_id, table_oda.c.oda_tipi,
                    table_oda.c.oda_fiyat
                ]).where(table_oda.c.otel_id == otel_id)
                rows_oda = conn.execute(select_st1)
                return render_template("oda_listele.html",
                                       rows=rows_oda,
                                       rows2=rows_otel,
                                       otel_id=otel_id)

        conn = engine.connect()
        select_st = select([table_otel.c.otel_id, table_otel.c.otel_adi])
        rows_otel = conn.execute(select_st)

        return render_template("oda_listele.html", rows2=rows_otel)

    @app.route('/oda_duzenle/<id>', methods=['GET', 'POST'])
    @login_required
    @admin_required
    def oda_duzenle(id=0):
        if request.method == 'POST':
            oda_adi = request.form['odaadi']
            oda_tipi = request.form['odatipi']
            oda_fiyat = request.form['odafiyat']
            conn = engine.connect()
            select_st1 = table_oda.update().where(
                table_oda.c.oda_id == id).values(oda_adi=oda_adi,
                                                 oda_tipi=oda_tipi,
                                                 oda_fiyat=oda_fiyat)
            conn.execute(select_st1)
            return redirect(url_for('oda_listele'))
        else:
            conn = engine.connect()
            select_st2 = select([
                table_oda.c.oda_id, table_oda.c.oda_adi, table_oda.c.oda_tipi,
                table_oda.c.oda_fiyat
            ]).where(table_oda.c.oda_id == id)
            rows = conn.execute(select_st2)

            return render_template("oda_duzenle.html",
                                   tmp_oda_id=id,
                                   rows=rows)

    @app.route('/oda_sil/<id>')
    @login_required
    @admin_required
    def oda_sil(id=0):
        conn = engine.connect()
        select_st = table_oda.delete().where(table_oda.c.oda_id == id)
        rows = conn.execute(select_st)

        return redirect(url_for('oda_listele'))

    @app.route('/rezerve', methods=['GET', 'POST'])
    def rezerve():
        conn = engine.connect()
        j = table_oda.join(table_otel,
                           table_oda.c.otel_id == table_otel.c.otel_id)

        stmt = select([
            table_oda.c.oda_id, table_oda.c.oda_adi, table_oda.c.oda_tipi,
            table_oda.c.oda_fiyat, table_otel.c.otel_sehir,
            table_otel.c.otel_adi, table_oda.c.otel_id
        ]).select_from(j).where(table_oda.c.oda_durum == 0)
        rows = conn.execute(stmt)

        return render_template("rezerve.html", rows=rows)

    @app.route('/sepet_ekle/<id>', methods=['GET', 'POST'])
    @login_required
    def sepet_ekle(id=0):
        conn = engine.connect()

        select_st1 = select([table_oda.c.oda_fiyat
                             ]).where(table_oda.c.oda_id == id)
        toplam_tutar = conn.execute(select_st1).scalar()
        print('toplam tutar: ', toplam_tutar)

        select_st2 = select([table_oda.c.otel_id
                             ]).where(table_oda.c.oda_id == id)
        otel_id = conn.execute(select_st2).scalar()

        sepet = Sepet(user_id=sorgu_kullanici_id,
                      otel_id=otel_id,
                      oda_id=id,
                      toplam_tutar=toplam_tutar,
                      rezerve_tarih=datetime.datetime.utcnow(),
                      giris_tarih=None,
                      cikis_tarih=None,
                      kalinacak_gun=0)
        db.session.add(sepet)
        db.session.commit()

        return redirect(url_for('sepet'))

    @app.route('/sepet', methods=['GET', 'POST'])
    @login_required
    def sepet():
        global sorgu_kullanici_puan
        conn = engine.connect()
        j = table_oda.join(table_otel,
                           table_oda.c.otel_id == table_otel.c.otel_id).join(
                               table_sepet,
                               table_oda.c.oda_id == table_sepet.c.oda_id)

        sorgu1 = select([
            table_sepet.c.sepet_id, table_oda.c.oda_id, table_oda.c.oda_adi,
            table_oda.c.oda_tipi, table_oda.c.oda_fiyat,
            table_otel.c.otel_sehir, table_otel.c.otel_adi, table_oda.c.otel_id
        ]).select_from(j).where(table_sepet.c.sepet_durum == 0)
        rows = conn.execute(sorgu1)

        sorgu2 = select([
            table_users.c.kullanici_puan
        ]).where(table_users.c.kullanici_id == sorgu_kullanici_id)
        sorgu_kullanici_puan = conn.execute(sorgu2).scalar()
        sorgu_kullanici_puan = round(sorgu_kullanici_puan, 4)

        return render_template("sepet.html",
                               rows=rows,
                               puan=sorgu_kullanici_puan)

    @app.route('/sepet_sepet_tarih_sec/<id>/<odaid>', methods=['GET', 'POST'])
    @login_required
    def sepet_tarih_sec(id=None, odaid=None):

        return render_template("sepet_onay.html", sepet_id=id, oda_id=odaid)

    @app.route('/sepet_duzenle/<id>/<odaid>', methods=['GET', 'POST'])
    @login_required
    def sepet_duzenle(id=None, odaid=None):
        if request.method == 'POST':
            tmp_giris = request.form['giristarihi']
            tmp_cikis = request.form['cikistarihi']

            giris_liste = tmp_giris.split('-')
            cikis_liste = tmp_cikis.split('-')

            giris_tarih = date(int(giris_liste[0]), int(giris_liste[1]),
                               int(giris_liste[2]))
            cikis_tarih = date(int(cikis_liste[0]), int(cikis_liste[1]),
                               int(cikis_liste[2]))
            kalinacak_gun = request.form['kalinacakgun']
            puan_kullanma_durumu = request.form['puan']

            if puan_kullanma_durumu == '1':
                conn = engine.connect()
                select_st2 = select([
                    table_users.c.kullanici_puan
                ]).where(table_users.c.kullanici_id == sorgu_kullanici_id)
                puan_kullanma_durumu = conn.execute(select_st2).scalar()
                print('puan_kullanma_durumu: ', puan_kullanma_durumu)

            else:
                puan_kullanma_durumu = 0
                print('puan_kullanma_durumu: ', puan_kullanma_durumu)

            global sorgu_kazanilan_puan
            conn = engine.connect()
            select_st2 = select([table_oda.c.oda_fiyat
                                 ]).where(table_oda.c.oda_id == odaid)
            birim_fiyat = conn.execute(select_st2).scalar()
            print('birim fiyat: ', birim_fiyat)
            toplam_tutar = float(kalinacak_gun) * birim_fiyat - float(
                puan_kullanma_durumu)
            sorgu_kazanilan_puan = toplam_tutar * 0.03 - puan_kullanma_durumu
            print('kazanilan puan: ', sorgu_kazanilan_puan)

            select_st1 = table_sepet.update().where(
                table_sepet.c.sepet_id == id).values(
                    giris_tarih=giris_tarih,
                    cikis_tarih=cikis_tarih,
                    kalinacak_gun=kalinacak_gun,
                    toplam_tutar=toplam_tutar)
            conn.execute(select_st1)

        return redirect(url_for('sepet'))

    @app.route('/sepet_onay/<id>', methods=['GET', 'POST'])
    @login_required
    def sepet_onay(id=0):
        global sorgu_kullanici_puan
        try:
            conn = engine.connect()
            tmp_tarihzaman = datetime.datetime.utcnow()
            select_st1 = table_sepet.update().where(
                table_sepet.c.sepet_id == id).values(
                    sepet_durum=1, rezerve_tarih=tmp_tarihzaman)

            sorgu_kullanici_puan += sorgu_kazanilan_puan
            select_st2 = table_users.update().where(
                table_users.c.kullanici_id == sorgu_kullanici_id).values(
                    kullanici_puan=sorgu_kullanici_puan)

            conn.execute(select_st1)
            conn.execute(select_st2)
        except:
            flash('Önce tarih seçmelisiniz')

        return redirect(url_for('sepet'))

    @app.route('/sepet_sil/<id>', methods=['GET', 'POST'])
    @login_required
    def sepet_sil(id=0):
        conn = engine.connect()
        select_st1 = table_sepet.delete().where(table_sepet.c.sepet_id == id)
        conn.execute(select_st1)

        return redirect(url_for('sepet'))

    @app.route('/islemlerim', methods=['GET', 'POST'])
    @login_required
    def islemler():
        conn = engine.connect()
        j = table_sepet.join(table_oda,
                             table_sepet.c.oda_id == table_oda.c.oda_id).join(
                                 table_otel,
                                 table_sepet.c.otel_id == table_otel.c.otel_id)

        stmt = select([
            table_otel.c.otel_adi, table_otel.c.otel_sehir,
            table_otel.c.otel_id, table_oda.c.oda_adi, table_oda.c.oda_tipi,
            table_sepet.c.giris_tarih, table_sepet.c.cikis_tarih,
            table_sepet.c.kalinacak_gun, table_sepet.c.toplam_tutar,
            table_sepet.c.rezerve_tarih
        ]).select_from(j).where(
            and_(table_sepet.c.user_id == sorgu_kullanici_id,
                 table_sepet.c.sepet_durum == 1))

        rows = conn.execute(stmt)
        return render_template("islem.html", rows=rows)

    return app
示例#3
0
def create_app():
    """ Flask application factory """
    
    # Create Flask app load app.config
    app = Flask(__name__)
    app.config.from_object(__name__+'.ConfigClass')

    # Initialize Flask-SQLAlchemy
    db = SQLAlchemy(app)

    # Define the User data-model.
    # NB: Make sure to add flask_user UserMixin !!!
    class User(db.Model, UserMixin):
        __tablename__ = 'users'
        id = db.Column(db.Integer, primary_key=True)
        active = db.Column('is_active', db.Boolean(), nullable=False, server_default='1')

        # User authentication information. The collation='NOCASE' is required
        # to search case insensitively when USER_IFIND_MODE is 'nocase_collation'.
        email = db.Column(db.String(255, collation='NOCASE'), nullable=False, unique=True)

        # User information
        first_name = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='')
        last_name = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='')

    # Create all database tables
    db.create_all()

    # Setup Flask-User and specify the User data-model
    user_manager = UserManager(app, db, User)

    # The Home page is accessible to anyone
    @app.route('/')
    def home_page():
        # String-based templates
        return render_template_string("""
            {% extends "flask_user_layout.html" %}
            {% block content %}
                <h2>Home page</h2>
                <p><a href={{ url_for('user.register') }}>Register</a></p>
                <p><a href={{ url_for('user.login') }}>Sign in</a></p>
                <p><a href={{ url_for('home_page') }}>Home page</a> (accessible to anyone)</p>
                <p><a href={{ url_for('member_page') }}>Member page</a> (login required)</p>
                <p><a href={{ url_for('user.logout') }}>Sign out</a></p>
            {% endblock %}
            """)

    # The Members page is only accessible to authenticated users via the @login_required decorator
    @app.route('/members')
    @login_required    # User must be authenticated
    def member_page():
        # String-based templates
        return render_template_string("""
            {% extends "flask_user_layout.html" %}
            {% block content %}
                <h2>Members page</h2>
                <p><a href={{ url_for('user.register') }}>Register</a></p>
                <p><a href={{ url_for('user.login') }}>Sign in</a></p>
                <p><a href={{ url_for('home_page') }}>Home page</a> (accessible to anyone)</p>
                <p><a href={{ url_for('member_page') }}>Member page</a> (login required)</p>
                <p><a href={{ url_for('user.logout') }}>Sign out</a></p>
            {% endblock %}
            """)

    return app
        __tablename__ = 'siparis'
        siparisId = db.Column(db.Integer, primary_key=True)
        musteriId = db.Column(db.Integer(), db.ForeignKey('musteri.musteriId', ondelete='CASCADE'))
        urunId = db.Column(db.Integer(), db.ForeignKey('urunler.urun_id', ondelete='CASCADE'))
        siparisno = db.Column(db.Integer)
        siparisTarihi = db.Column(db.Integer)
        odemeId = db.Column(db.Integer())

        def __init__(self, musteriId, urunId, siparisno, siparisTarihi, odemeId):
            self.musteriId = musteriId
            self.urunId = urunId
            self.siparisno = siparisno
            self.siparisTarihi = siparisTarihi
            self.odemeId = odemeId

    user_manager = UserManager(app, db, Kullanici)
    db.create_all()

	if not Kullanici.query.filter(Kullanici.email == request.form['email']).first():
        kullanici = Kullanici(
            email=request.form['email'],
            tarih=datetime.datetime.utcnow(),
            sifre=user_manager.hash_password(request.form['sifre']),
        )
        

    # Create '*****@*****.**' user with 'Admin' and 'Agent' roles
    if not Kullanici.query.filter(Kullanici.email == '*****@*****.**').first():
        user = User(
            email='*****@*****.**',
            email_confirmed_at=datetime.datetime.utcnow(),
def create_app():
    """ Flask application factory """

    # Create Flask app load app.config
    app = Flask(__name__)
    app.config.from_object(__name__ + '.ConfigClass')

    db = SQLAlchemy(app)

    class Kullanici(db.Model):
    	__tablename__ = 'Kullanici'
    	id = db.Column(db.Integer, primary_key=True)
    	email = db.Column(db.String(80), unique=True)
    	sifre = db.Column(db.String(80))
    	rolId = db.Column(db.Integer, db.ForeignKey('rol.rolId', ondelete='CASCADE'))
    	active = db.Column('is_active', db.Boolean(), nullable=False, server_default='1')
		

    	def __init__(self, email, sifre):
            self.email = email
            self.sifre = sifre
            self.rolId = 0

    class Roller(db.Model):
        __tablename__ = 'rol'
        rolId = db.Column(db.Integer, primary_key=True)
        rolisim = db.Column(db.String(80))

    class urunler(db.Model):
        __tablename__ = 'urunler'
        urun_id = db.Column(db.Integer, primary_key=True)
        kategori_id = db.Column(db.Integer(), db.ForeignKey('kategori.kategoriId', ondelete='CASCADE'))
        urunresmi = db.Column(db.String(80))
        urunFiyati = db.Column(db.Integer)
        markaId = db.Column(db.Integer(), db.ForeignKey('markalar.markaId', ondelete='CASCADE'))

        def __init__(self, kategori_id, urun_ozellikleri, urun_fiyati):
            self.kategori_id = kategori_id
            self.urun_ozellikleri = urun_ozellikleri
            self.urun_fiyati = urun_fiyati

    class kategori(db.Model):
        __tablename__ = 'kategori'
        kategoriId = db.Column(db.Integer, primary_key=True)
        kategori_adi = db.Column(db.String(80))

        def __init__(self, kategori_adi):
            self.kategori_adi = kategori_adi

    class markalar(db.Model):
        __tablename__ = 'markalar'
        markaId = db.Column(db.Integer, primary_key=True)
        markaadi = db.Column(db.String(80))
        marka_modeli = db.Column(db.String(80))

        def __init__(self, markaadi, marka_modeli):
            self.markaadi = markaadi
            self.marka_modeli = marka_modeli

    class musteri(db.Model):
        __tablename__ = 'musteri'
        musteriId = db.Column(db.Integer, primary_key=True)
        musteriadi = db.Column(db.String(80))
        musterisoyadi = db.Column(db.String(80))
        mail = db.Column(db.String(80), unique=True)
        telefon = db.Column(db.Integer)
        sifre = db.Column(db.String(80))
        il = db.Column(db.String(80))
        ilce = db.Column(db.String(80))
        kullaniciId = db.Column(db.Integer(), db.ForeignKey('Kullanici.id', ondelete='CASCADE'))

        def __init__(self, musteriadi, musterisoyadi, mail, telefon, sifre, il, ilce, kullaniciId):
            self.musteriadi = musteriadi
            self.musterisoyadi = musterisoyadi
            self.mail = mail
            self.telefon = telefon
            self.sifre = sifre
            self.il = il
            self.ilce = ilce
            self.kullaniciId = kullaniciId

    class siparis(db.Model):
        __tablename__ = 'siparis'
        siparisId = db.Column(db.Integer, primary_key=True)
        musteriId = db.Column(db.Integer(), db.ForeignKey('musteri.musteriId', ondelete='CASCADE'))
        urunId = db.Column(db.Integer(), db.ForeignKey('urunler.urun_id', ondelete='CASCADE'))
        siparisno = db.Column(db.Integer)
        siparisTarihi = db.Column(db.Integer)
        odemeId = db.Column(db.Integer())

        def __init__(self, musteriId, urunId, siparisno, siparisTarihi, odemeId):
            self.musteriId = musteriId
            self.urunId = urunId
            self.siparisno = siparisno
            self.siparisTarihi = siparisTarihi
            self.odemeId = odemeId

    user_manager = UserManager(app, db, Kullanici)
    db.create_all()
	
	
	

    @app.route('/')
    def anasayfa():
        return render_template('index.html')

    @app.route('/kayit', methods=['GET', 'POST'])
    def kayit():
        if request.method == 'POST':
            mail = request.form['email']
            parola = request.form['sifre']
            yeniKullanici = Kullanici(email=mail, sifre=parola)
            db.session.add(yeniKullanici)
            db.session.commit()
            if yeniKullanici is not None:
                mesaj = "Kayıt Başarıyla Sağlanmıştır."
                return render_template("index.html", mesaj=mesaj)
        else:
            return render_template('kayit.html')

    @app.route('/uye', methods=['GET', 'POST'])
    def uye():
        return render_template("uyeGirisi.html")

    @app.route('/giris', methods=['GET', 'POST'])
    def giris():
		
		if request.method=='POST':
			if request.form['email']!='*****@*****.**' or request.form['sifre']!='admin':
				if Kullanici.query.filter_by(email=request.form['email'],sifre=request.form['sifre']) is not None:
					return redirect(url_for('anasayfa'))
				else:
					hata='Hatalı giriş yaptınız!'
			else:
				flash('giriş başarılı')
				return redirect(url_for('admin'))

	@app.route('/admin')
    def admin():
        return render_template("admin.html")
					



   

    return app
示例#6
0
def create_app():
    """ Flask application factory """

    # Create Flask app load app.config
    app = Flask(__name__)
    app.config.from_object(__name__ + '.ConfigClass')

    # Initialize Flask-BabelEx
    babel = Babel(app)

    # Initialize Flask-SQLAlchemy
    db = SQLAlchemy(app)

    # Define the User data-model.
    # NB: Make sure to add flask_user UserMixin !!!
    class User(db.Model, UserMixin):
        __tablename__ = 'users'
        id = db.Column(db.Integer, primary_key=True)
        active = db.Column('is_active',
                           db.Boolean(),
                           nullable=False,
                           server_default='1')

        # User authentication information. The collation='NOCASE' is required
        # to search case insensitively when USER_IFIND_MODE is 'nocase_collation'.
        username = db.Column(db.String(255, collation='NOCASE'),
                             nullable=False,
                             unique=True)
        password = db.Column(db.String(255), nullable=False, server_default='')

        # Define the relationship to Role via UserRoles
        roles = db.relationship('Role', secondary='user_roles')
        transactions = db.relationship('Transactions',
                                       backref=backref('users', uselist=False))

    # Define the Role data-model
    class Role(db.Model):
        __tablename__ = 'roles'
        id = db.Column(db.Integer(), primary_key=True)
        name = db.Column(db.String(50), unique=True)

    # Define the UserRoles association table
    class UserRoles(db.Model):
        __tablename__ = 'user_roles'
        id = db.Column(db.Integer(), primary_key=True)
        user_id = db.Column(db.Integer(),
                            db.ForeignKey('users.id', ondelete='CASCADE'))
        role_id = db.Column(db.Integer(),
                            db.ForeignKey('roles.id', ondelete='CASCADE'))

    class Transactions(db.Model):
        __tablename__ = 'transactions'
        id = db.Column(db.Integer(), primary_key=True)
        company = db.Column(db.String(100, collation='NOCASE'),
                            nullable=False,
                            server_default='')
        amount = db.Column(db.Integer())
        status = db.Column(db.Integer())
        user_id = db.Column(db.Integer,
                            db.ForeignKey('users.id'),
                            nullable=False)

    # Setup Flask-User and specify the User data-model
    user_manager = UserManager(app, db, User)

    # Create all database tables
    db.create_all()

    # Create 'user' user with user role, append two associated transaction records
    if not User.query.filter(User.username == 'user').first():
        user = User(
            username='******',
            password=user_manager.hash_password('Password1'),
        )

        user.transactions.append(
            Transactions(company='Apple', amount=10, status=0))
        user.transactions.append(
            Transactions(company='Apple', amount=20, status=0))
        db.session.add(user)
        db.session.commit()

    # Create 'admin' user with 'Admin' role
    if not User.query.filter(User.username == 'admin').first():
        user = User(
            username='******',
            password=user_manager.hash_password('admin'),
        )
        user.roles.append(Role(name='Admin'))
        db.session.add(user)
        db.session.commit()

    # Create 'comp' user with 'comp' role
    if not User.query.filter(User.username == 'comp').first():
        user = User(
            username='******',
            password=user_manager.hash_password('comp'),
        )
        user.roles.append(Role(name='Compliance'))
        db.session.add(user)
        db.session.commit()

    # Create 'user_test' user with 'user' role
    if not User.query.filter(User.username == 'user_test').first():
        user = User(
            username='******',
            password=user_manager.hash_password('user_test'),
        )
        user.roles.append(Role(name='User'))
        db.session.add(user)
        db.session.commit()

    # The Home page is accessible to anyone
    @app.route('/')
    def home_page():

        return render_template('home_page.html')

    # The user page requires an 'user' role.
    @app.route('/user')
    @roles_required('User')
    def user_page():
        user_id = current_user.id

        pending = Transactions.query.filter(Transactions.user_id == user_id,
                                            Transactions.status == 0).all()
        approved = Transactions.query.filter(Transactions.user_id == user_id,
                                             Transactions.status == 1).all()
        rejected = Transactions.query.filter(Transactions.user_id == user_id,
                                             Transactions.status == 2).all()

        return render_template('user_page.html',
                               pending=pending,
                               approved=approved,
                               rejected=rejected)

    #user submits transaction record
    @app.route('/add_trans', methods=['POST'])
    def add_trans():
        company = request.form['company']
        num_shares = request.form['num_shares']

        user = User.query.filter(User.id == current_user.id).first()
        user.transactions.append(
            Transactions(company=company, amount=num_shares, status=0))
        db.session.commit()

        flash("Transaction Submitted!")

        return redirect(url_for('user_page'))

    # The compliance page requires an 'compliance' role.
    @app.route('/compliance')
    @roles_required('Compliance')
    def member_page():
        pending = Transactions.query.filter(Transactions.status == 0).all()
        approved = Transactions.query.filter(Transactions.status == 1).all()
        rejected = Transactions.query.filter(Transactions.status == 2).all()

        return render_template('compliance_page.html',
                               pending=pending,
                               approved=approved,
                               rejected=rejected)

    #compliance can reject/approve transactions, reload page after submitting decision
    @app.route('/decide_trans', methods=['POST'])
    def decide_trans():
        trans_id = request.form['trans_id']
        decision = 1 if request.form['submit_button'] == "Approve" else 2

        trans = Transactions.query.filter(Transactions.id == trans_id).first()
        trans.status = decision
        db.session.commit()

        pending = Transactions.query.filter(Transactions.status == 0).all()
        approved = Transactions.query.filter(Transactions.status == 1).all()
        rejected = Transactions.query.filter(Transactions.status == 2).all()

        return render_template('compliance_page.html',
                               pending=pending,
                               approved=approved,
                               rejected=rejected)

    # The Admin page requires an 'Admin' role.
    @app.route('/admin')
    @roles_required('Admin')
    def admin_page():
        return render_template('admin_page.html')

    # admin can add new user/compliance, show 'user exists' if username has duplicates
    @app.route('/add_new', methods=['POST'])
    def add_new():
        role = request.form['role']
        username = request.form['username']
        password = request.form['password']

        if not User.query.filter(User.username == username).first():
            user = User(
                username=username,
                password=user_manager.hash_password(password),
            )
            stored_role = Role.query.filter(Role.name == role).first()

            user.roles.append(stored_role)
            db.session.add(user)
            db.session.commit()
            return render_template_string(role)
        else:
            return render_template_string('user exists')

    return app
示例#7
0
application.config['USER_AFTER_REGISTER_ENDPOINT'] = 'user.login'
application.config.from_pyfile('config.cfg')

db = SQLAlchemy(application)
mail = Mail(application)

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50), nullable=False, unique=True)
    password = db.Column(db.String(255), nullable=False, server_default='')
    active = db.Column(db.Boolean(), nullable=False, server_default='0')
    email = db.Column(db.String(255), nullable=False, unique=True)
    confirmed_at = db.Column(db.DateTime())

db_adapter = SQLAlchemyAdapter(db, User)
user_manager = UserManager(db_adapter, application)

@application.route('/')
def index():
    return '<h1>This is the home page!</h1>'

@application.route("/pop_up_html")
def pop_up_html():
    return  render_template("/pop_up_html.html")

@application.route('/profile')
@login_required
def profile():
    return '<h1>This is the protected profile page!</h1>'

if __name__ == '__main__':
示例#8
0
# Forgot Password E-mails
app.config['USER_ENABLE_FORGOT_PASSWORD'] = True

# Changing Password E-mails
app.config['USER_ENABLE_CHANGE_PASSWORD'] = True
app.config['USER_SEND_PASSWORD_CHANGED_EMAIL'] = True

# Change Username E-Mails
app.config['USER_ENABLE_CHANGE_USERNAME'] = True
app.config['USER_SEND_USERNAME_CHANGED_EMAIL'] = True

db.init_app(app)
mail = Mail(app)

db_adapter = SQLAlchemyAdapter(db, User)
user_manager = UserManager(db_adapter, app, register_form=MyRegisterForm)

##################################################
######     REST API Registration       ###########
##################################################
## TODO: Register API...need to place this somewhere better.
## TODO: What is best practice on how to organize these?

api_manager = flask.ext.restless.APIManager(app, flask_sqlalchemy_db=db)
# TODO: Decide what all user information is appropriate to make available.
user_blueprint = api_manager.create_api(
    User,
    methods=['GET'],
    exclude_columns=['password', 'reset_password_token'],
    url_prefix='/api/v1')
site_blueprint = api_manager.create_api(Site,
示例#9
0
文件: init_app.py 项目: SayCV/tendril
def init_app(app):
    """
    Initialize Flask applicaton
    """

    # Initialize app config settings
    app.config.from_object('tendril.frontend.startup.settings')
    if app.testing:
        # Disable CSRF checks while testing
        app.config['WTF_CSRF_ENABLED'] = False

    # Initialize Assets
    from tendril.frontend.startup import assets  # noqa

    # Create Filters
    def unicode_filter(s):
        if not isinstance(s, unicode):
            try:
                s = unicode(s, 'utf-8')
            except UnicodeDecodeError:
                s = unicode(s, 'latin-1')
        return s

    app.jinja_env.filters['unicode'] = unicode_filter

    def quote_filter(s):
        return quote(s)

    app.jinja_env.filters['quote'] = quote_filter

    def unquote_filter(s):
        return unquote(s)

    app.jinja_env.filters['unquote'] = unquote_filter

    def strip(s):
        return s.strip()

    app.jinja_env.filters['strip'] = strip

    def monthname(s):
        return arrow_locale.month_abbreviation(s)

    app.jinja_env.filters['monthname'] = monthname

    def latex_render_filter(s):
        # TODO make this generic
        if not isinstance(s, str):
            s = str(s)
        s = s.replace('$\pm$', '&plusmn;')
        return s

    app.jinja_env.filters['latex_render'] = latex_render_filter

    # TODO Consider using these filters to produce python-nvd3 graphs
    # instead of having all of that mess in JS in the html templates.
    from .helpers import lineplot_filter
    app.jinja_env.filters['lineplot'] = lineplot_filter

    from .helpers import histogram_filter
    app.jinja_env.filters['histogram'] = histogram_filter

    # Setup Flask-Mail
    mail = Mail(app)  # noqa

    # Setup an error-logger to send emails to app.config.ADMINS
    init_error_logger_with_email_handler(app)

    # Setup Flask-User to handle user account related forms
    from tendril.auth.db.model import UserAuth, User
    from tendril.frontend.users.forms import MyRegisterForm
    from tendril.frontend.users.views import user_profile_page

    db_adapter = SQLAlchemyAdapter(db, User, UserAuthClass=UserAuth)
    user_manager = UserManager(
        db_adapter,
        app,  # noqa
        register_form=MyRegisterForm,
        user_profile_view_function=user_profile_page,
    )

    # Load all views.py files to register @app.routes() with Flask
    from tendril.frontend.pages import views  # noqa
    from tendril.frontend.users import views  # noqa

    # Configure send_file
    from tendril.utils.config import USE_X_SENDFILE
    app.use_x_sendfile = USE_X_SENDFILE

    # Register blueprints
    from tendril.frontend.blueprints.expose import expose
    app.register_blueprint(expose, url_prefix='/expose')

    from tendril.frontend.blueprints.doc import doc
    app.register_blueprint(doc, url_prefix='/doc')

    from tendril.frontend.blueprints.gsymlib import gsymlib
    app.register_blueprint(gsymlib, url_prefix='/gsymlib')

    from tendril.frontend.blueprints.entityhub import entityhub
    app.register_blueprint(entityhub, url_prefix='/entityhub')

    from tendril.frontend.blueprints.conventions import conventions
    app.register_blueprint(conventions, url_prefix='/conventions')

    from tendril.frontend.blueprints.customs import customs
    app.register_blueprint(customs, url_prefix='/sourcing/customs')

    from tendril.frontend.blueprints.vendors import vendors
    app.register_blueprint(vendors, url_prefix='/sourcing/vendors')

    from tendril.frontend.blueprints.testing import testing
    app.register_blueprint(testing, url_prefix='/testing')

    from tendril.frontend.blueprints.production import production
    app.register_blueprint(production, url_prefix='/production')

    from tendril.frontend.blueprints.indent import indent
    app.register_blueprint(indent, url_prefix='/inventory/indent')

    from tendril.frontend.blueprints.inventory import inventory
    app.register_blueprint(inventory, url_prefix='/inventory/location')

    from tendril.frontend.blueprints.invtransforms import invtransforms
    app.register_blueprint(invtransforms, url_prefix='/inventory/transform')

    # Configure context processors
    from tendril.frontend.startup import helpers

    @app.teardown_appcontext
    def shutdown_session(exception=None):
        db.session.remove()

    return app
示例#10
0
mail = Mail(app)

limiter = Limiter(
    app,
    key_func=get_remote_address,
    default_limits=["3000 per day", "20 per minute"]
)

db = SQLAlchemy(app)
migrate = Migrate(app, db)
assets = Environment(app)
moment = Moment(app)





css = Bundle('css/custom-footer.css','css/bootstrap.css','css/blog.css',
             'css/media.css',
            filters='cssmin', output='gen/packed.css')
assets.register('css_all', css)

js = Bundle('js/infiniscroll.js','js/delete.js','js/jquery.serialize-object.min.js',
            filters='jsmin', output='gen/packed.js')
assets.register('js_all', js)

from app import routes, models
user_manager = UserManager(app, db, models.User)

app.elasticsearch = Elasticsearch([app.config['ELASTICSEARCH_URL']]) \
    if app.config['ELASTICSEARCH_URL'] else None
示例#11
0
def authinit(app):
    userauth = Blueprint('userauth', __name__)

    google_blueprint = make_google_blueprint(
        client_id=app.config['globalConfig'].Config.get(
            "OAuth", "GOOGLE_CLIENT_ID"),
        client_secret=app.config['globalConfig'].Config.get(
            "OAuth", "GOOGLE_CLIENT_SECRET"),
        scope=[  #"https://www.googleapis.com/auth/plus.me",
            "https://www.googleapis.com/auth/userinfo.email"
        ],
        offline=True)

    google_blueprint.backend = SQLAlchemyBackend(OAuth,
                                                 db.session,
                                                 user=current_user,
                                                 user_required=True)

    user_manager = UserManager(app, db, Member)
    user_manager.USER_ENABLE_AUTH0 = True
    user_manager.unauthenticated_view = our_login
    login_manager = LoginManager()
    login_manager.login_view = "google.login"
    login_manager.init_app(app)
    login_manager.anonymous_user = AnonymousMember

    @login_manager.user_loader
    def load_user(user_id):
        if not user_id.lower().endswith("@makeitlabs.com"):
            logger.error("User {0} invalid for login".format(user_id))
            return None
        mid = user_id.split("@")[0]
        mr = Member.query.filter(Member.member == mid).one_or_none()
        if not mr:
            logger.error("User {0} Found no member record".format(user_id))
        logger.debug("User {0} loaded".format(user_id))
        return mr
        #return Member.get(user_id)

    @userauth.route("/google_login")
    def google_login():
        if not google.authorized:
            logger.debug("Not google authorized")
            session['next_url'] = request.args.get('next')
            return redirect(url_for("google.login"))
        resp = google.get(SCOPE)
        assert resp.ok, resp.text
        return resp.text

    @oauth_authorized.connect_via(google_blueprint)
    def google_logged_in(blueprint, token):
        resp = google.get("/oauth2/v2/userinfo")
        #print "RESP",dir(resp)
        #print "HEADERS",resp.headers
        #print "REASON",resp.reason
        #print "TEXT",resp.text
        #print "NEXT",resp.next
        #print "LINKS",resp.links
        #print "URL",resp.url
        #print "IS_REDIRECT",resp.is_redirect
        if resp.ok:
            account_info_json = resp.json()
            email = account_info_json['email']
            member = email.split("@")[0]
            logger.debug("Google auth RESP for {0} {1}".format(email, member))
            if not email.endswith("@makeitlabs.com"):
                flash(
                    "Not a MakeIt Labs account - You must log in with your @makeitlabs.com email address",
                    'warning')
                logger.error("Not a MakeIt Labs account " + str(email))
                return redirect(url_for('empty'))
            #query = Member.query.filter_by(Member.member.ilike(member))
            #if not query:
            query = Member.query.filter(Member.email.ilike(email))

            try:
                user = query.all()
                if len(user) > 1:
                    flash(
                        "Error - Multiple accounts with same email - please seek assistance",
                        'warning')
                    logger.error("%s has multiple account (GUI Login)" % email)
                    return redirect(url_for('empty'))

                if len(user) == 0:
                    flash("Error - No account found - please seek assistance",
                          'warning')
                    logger.error("No account matching %s for GUI login" %
                                 email)
                    return redirect(url_for('empty'))

                user = user[0]
                sub = quickSubscriptionCheck(member_id=user.id)
                #print "UserID %s SUB IS %s" % (user.id,sub)
                if sub == "Active" or sub == "Grace Period":
                    if (UserRoles.query.filter(
                            UserRoles.member_id == user.id).count() >= 1):
                        login_user(user, remember=True)
                        flash("Welcome!")
                        return redirect(url_for('index'))
                    logintype = app.config['globalConfig'].Config.get(
                        'General', 'Logins')
                    if logintype == "resource":
                        if (AccessByMember.query.filter(
                                AccessByMember.member_id == user.id,
                                AccessByMember.level >=
                                AccessByMember.LEVEL_TRAINER).count() == 0):
                            flash("Only resource managers may log in")
                            logger.error("Only resource managers may log in " +
                                         str(email))
                        else:
                            login_user(user, remember=True)
                    else:
                        flash("Welcome!")
                        login_user(user, remember=True)
                        return redirect(url_for('index'))
                else:
                    flash("Login Denied - " + str(sub), 'danger')
                    logger.error("Login Denied - " + str(email) + " is " +
                                 str(sub))
                return redirect(url_for('empty'))
            except NoResultFound:
                flash(
                    "Email adddress " + str(email) +
                    " not found in member database", "warning")
                logger.error("Email adddress " + str(email) +
                             " not found in member database")
                return redirect(url_for('empty'))
        else:
            logger.error("Google auth RESP is NOT okay")

    @userauth.route('/google_logout')
    def google_logout():
        """Revokes token and empties session."""
        if google.authorized:
            try:
                google.get(
                    'https://accounts.google.com/o/oauth2/revoke',
                    params={'token': google.token['access_token']},
                )
            except InvalidClientIdError:  # token expiration
                del google.token
                flash("OAuth error: Invalid Client ID", 'danger')
                redirect(url_for('main.index'))
        session.clear()
        logout_user()
        return redirect(url_for('main.index'))

    app.register_blueprint(google_blueprint, url_prefix="/google_login")
示例#12
0
def create_app():
    """ Flask application factory """
    
    # Create Flask app load app.config
    app = Flask(__name__)
    app.config.from_object(__name__+'.ConfigClass')

    # Initialize Flask-BabelEx
    babel = Babel(app)
    # Initialize Flask-SQLAlchemy
    @babel.localeselector
    def get_locale():
       translations = [str(translation) for translation in babel.list_translations()]
    #   return request.accept_languages.best_match(translations)
    # @babel.localeselector
    #def get_locale():
    #   if request.args.get('lang'):
    #       session['lang'] = request.args.get('lang')
    #       return session.get('lang', 'tr')

    db = SQLAlchemy(app)

    # Define the User data-model.
    # NB: Make sure to add flask_user UserMixin !!!
    class User(db.Model, UserMixin):
        __tablename__ = 'users'
        id = db.Column(db.Integer, primary_key=True)
        active = db.Column('is_active', db.Boolean(), nullable=False, server_default='1')

        # User authentication information. The collation='NOCASE' is required
        # to search case insensitively when USER_IFIND_MODE is 'nocase_collation'.
        email = db.Column(db.String(255, collation='NOCASE'), nullable=False, unique=True)
        email_confirmed_at = db.Column(db.DateTime())
        password = db.Column(db.String(255), nullable=False, server_default='')

        # User information
        first_name = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='')
        last_name = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='')

        # Define the relationship to Role via UserRoles
        roles = db.relationship('Role', secondary='user_roles')

    # Define the Role data-model
    class Role(db.Model):
        __tablename__ = 'roles'
        id = db.Column(db.Integer(), primary_key=True)
        name = db.Column(db.String(50), unique=True)

    # Define the UserRoles association table
    class UserRoles(db.Model):
        __tablename__ = 'user_roles'
        id = db.Column(db.Integer(), primary_key=True)
        user_id = db.Column(db.Integer(), db.ForeignKey('users.id', ondelete='CASCADE'))
        role_id = db.Column(db.Integer(), db.ForeignKey('roles.id', ondelete='CASCADE'))

    
     # Setup Flask-User and specify the User data-model
    user_manager = UserManager(app, db, User)

    # Create all database tables
    db.create_all()

   



    # The Home page is accessible to anyone
    @app.route('/')
    def home():
        veriler=User.query.all()
        return render_template('/index.html',veriler=verile)

    @app.route('/üye')
    def uye():
        
          
        return render_template('/üye.html'r)
    @app.route('/add',methods=["POST"])
    def adduser():
        email=request.form.get("e-mail")
        sifre=request.form.get("sifre")
        email_confirmed_at=datetime.datetime.utcnow()
        newuser=User(email=email,password=sifre,email_confirmed_at=email_confirmed_at)
        db.session.add(newuser)
        db.session.commit()
        return  redirect(url_for("uye"))

    return app
示例#13
0
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
from flask_user import UserManager, SQLAlchemyAdapter 
from flask_wtf import CSRFProtect
from wtforms.fields import HiddenField

app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app)
lm = LoginManager()
lm.init_app(app)
app.config['WTF_CSFR_ENABLED'] = True
CSRFProtect(app)
def is_hidden_field_filter(field):
    return isinstance(field, HiddenField)
app.jinja_env.globals['bootstrap_is_hidden_field'] = is_hidden_field_filter

#Flask User
from app.models import User
from app.forms import SomeRegisterForm
from app.views import user_profile_page
db_adapter = SQLAlchemyAdapter(db,User)
user_manager = UserManager(db_adapter, app, register_form=SomeRegisterForm,
                            user_profile_view_function=user_profile_page)
from app import views, models
示例#14
0
def create_app(config=None, extra_config_settings={}, min_db_connections=1):
    """Create a Flask applicaction.
    """
    # Instantiate Flask

    # Load App Config settings
    # Load common settings from 'app/settings.py' file
    app.config.from_object('app.settings')
    # Load local settings from 'app/local_settings.py'
    if config:
        app.config.from_object("app." + config)
    # Load extra config settings from 'extra_config_settings' param
    app.config.update(extra_config_settings)

    app.config["SQLALCHEMY_DATABASE_URI"] = 'postgresql://{}:{}@{}/{}'.format(
        app.config["DB_USER"], app.config["DB_PASS"], app.config["DB_HOST"],
        app.config["SYSTEM_DATABASE"])

    #get connections for the main databases (Non Flask-SQLAlchemy)
    get_databases(databases, app, min_db_connections)

    # Setup Flask-Extensions -- do this _after_ app config has been loaded
    #database.init_app(app)
    # Setup Flask-SQLAlchemy
    db.init_app(app)

    #work out modules
    root = app.root_path
    modules_folder = os.path.join(root, "modules")
    template_folders = []
    for folder in app.config["MODULES"]:
        module_folder = os.path.join(modules_folder, folder)
        if os.path.isdir(module_folder):
            load_module(app, module_folder)
            template_folders.append(
                os.path.join(root, "modules", folder, "templates"))

    my_loader = jinja2.ChoiceLoader([
        app.jinja_loader,
        jinja2.FileSystemLoader(template_folders),
    ])
    app.jinja_loader = my_loader

    app.config['MLV_MAIN_PROJECTS'] = []

    for p in app.config['MLV_PROJECTS']:
        im = app.config['MLV_PROJECTS'][p].get("import")
        #legacy
        if im:
            importlib.import_module(im)
        if app.config['MLV_PROJECTS'][p].get("main_project"):
            app.config['MLV_MAIN_PROJECTS'].append(p)

    #uplo
    celery.conf.update(app.config)

    # Setup Flask-Migrate
    #migrate.init_app(app, db)

    # Setup Flask-Mail
    mail.init_app(app)

    # Setup WTForms CSRFProtect
    csrf_protect.init_app(app)

    # Register blueprints
    from app.main import main
    app.register_blueprint(main, url_prefix="/")

    from app.meths import meths
    app.register_blueprint(meths, url_prefix="/meths")
    csrf_protect.exempt(meths)

    # Define bootstrap_is_hidden_field for flask-bootstrap's bootstrap_wtf.html
    from wtforms.fields import HiddenField

    def is_hidden_field_filter(field):
        return isinstance(field, HiddenField)

    app.jinja_env.globals['bootstrap_is_hidden_field'] = is_hidden_field_filter

    load_loggers(app)

    # Setup Flask-User to handle user account related forms
    from .databases.user_models import MyRegisterForm, User

    db_adapter = SQLAlchemyAdapter(db, User)  # Setup the SQLAlchemy DB Adapter
    user_manager = UserManager(
        db_adapter,
        app,  # Init Flask-User and bind to app
        register_form=
        MyRegisterForm  # using a custom register form with UserProfile fields
    )

    return app
示例#15
0
def create_app(extra_config_settings={}):
    """Create a Flask application.
    """
    # Instantiate Flask
    app = Flask(__name__)

    # Load common settings
    app.config.from_object('app.settings')
    # Load environment specific settings
    app.config.from_object('app.local_settings')
    # Load extra settings from extra_config_settings param
    app.config.update(extra_config_settings)

    # Setup Flask-SQLAlchemy
    db.init_app(app)

    # Setup Flask-Migrate
    migrate.init_app(app, db)

    # Setup Flask-Mail
    mail.init_app(app)

    # Setup WTForms CSRFProtect
    csrf_protect.init_app(app)

    # Register blueprints
    from .views import register_blueprints
    register_blueprints(app)

    # Define bootstrap_is_hidden_field for flask-bootstrap's bootstrap_wtf.html
    from wtforms.fields import HiddenField

    def is_hidden_field_filter(field):
        return isinstance(field, HiddenField)

    app.jinja_env.globals['bootstrap_is_hidden_field'] = is_hidden_field_filter

    # Setup an error-logger to send emails to app.config.ADMINS
    init_email_error_handler(app)

    # Additional persistent(not streamed) error log
    import logging
    from logging import Formatter
    from logging.handlers import WatchedFileHandler
    file_handler = WatchedFileHandler('logs/flask_app_error.log')
    file_handler.setLevel(logging.ERROR)
    file_handler.setFormatter(
        Formatter(f'%(asctime)s %(levelname)s : %(message)s'))
    app.logger.addHandler(file_handler)

    # Setup Flask-User to handle user account related forms
    from .models.user_models import User
    from .views.main_views import user_profile_page

    # Setup Flask-User
    user_manager = UserManager(app, db, User)

    @app.context_processor
    def context_processor():
        return dict(user_manager=user_manager)

    return app
示例#16
0
def init_app(app, test_config=None):  # For automated tests
    # Setup Flask and read config from ConfigClass defined above
    app.config.from_object(__name__ + '.ConfigClass')

    # Load local_settings.py if file exists         # For automated tests
    try:
        app.config.from_object('local_settings')
    except:
        pass

    # Load optional test_config                     # For automated tests
    if test_config:
        app.config.update(test_config)

    # Initialize Flask extensions
    babel = Babel(app)  # Initialize Flask-Babel
    mail = Mail(app)  # Initialize Flask-Mail

    # Reset all the database tables
    db.create_all()

    # Setup Flask-User
    db_adapter = SQLAlchemyAdapter(db,
                                   User,
                                   UserInvitationClass=UserInvitation)
    user_manager = UserManager(db_adapter, app)

    # Create regular 'member' user
    if not User.query.filter(User.username == 'member').first():
        user = User(username='******',
                    email='*****@*****.**',
                    active=True,
                    password=user_manager.hash_password('Password1'),
                    confirmed_at=datetime.datetime.utcnow())
        db.session.add(user)
        db.session.commit()

    # Create 'user007' user with 'secret' and 'agent' roles
    if not User.query.filter(User.username == 'user007').first():
        user1 = User(username='******',
                     email='*****@*****.**',
                     active=True,
                     password=user_manager.hash_password('Password1'))
        user1.roles.append(Role(name='secret'))
        user1.roles.append(Role(name='agent'))
        db.session.add(user1)
        db.session.commit()

    # The '/' page is accessible to anyone
    @app.route('/')
    def home_page():
        return render_template_string("""
            {% extends "base.html" %}
            {% block content %}
            <h2>{%trans%}Home Page{%endtrans%}</h2>
            <p><a href="{{ url_for('user.login') }}">{%trans%}Sign in{%endtrans%}</a></p>
            {% endblock %}
            """)

    # The '/profile' page requires a logged-in user
    @app.route('/user/profile')
    @login_required  # Use of @login_required decorator
    @confirm_email_required
    def user_profile_page():
        return render_template_string("""
            {% extends "base.html" %}
            {% block content %}
            <h2>{%trans%}Profile Page{%endtrans%}</h2>
            <p> {%trans%}Hello{%endtrans%}
                {{ current_user.username or current_user.email }},</p>
            <p> <a href="{{ url_for('user.change_username') }}">
                {%trans%}Change username{%endtrans%}</a></p>
            <p> <a href="{{ url_for('user.change_password') }}">
                {%trans%}Change password{%endtrans%}</a></p>
            <p> <a href="{{ url_for('user.invite') }}">
                {%trans%}Invite User{%endtrans%}</a></p>
            <p> <a href="{{ url_for('user.logout') }}?next={{ url_for('user.login') }}">
                {%trans%}Sign out{%endtrans%}</a></p>
            {% endblock %}
            """)

    # The '/special' page requires a user that has the 'special' AND ('sauce' OR 'agent') role.
    @app.route('/special')
    @roles_required('secret',
                    ['sauce', 'agent'])  # Use of @roles_required decorator
    def special_page():
        return render_template_string("""
            {% extends "base.html" %}
            {% block content %}
            <h2>{%trans%}Special Page{%endtrans%}</h2>
            {% endblock %}
            """)

    # For testing only
    app.db = db
    app.UserEmailClass = UserEmail

    return app
示例#17
0
def create_app():
    """ Flask application factory """

    # Setup Flask app and app.config
    app = Flask(__name__)
    app.config.from_object(__name__ + '.ConfigClass')

    # Initialize Flask extensions
    db = SQLAlchemy(app)  # Initialize Flask-SQLAlchemy
    mail = Mail(app)  # Initialize Flask-Mail

    # Define the User data model. Make sure to add flask.ext.user UserMixin !!!
    class User(db.Model, UserMixin):
        id = db.Column(db.Integer, primary_key=True)

        # User authentication information
        username = db.Column(db.String(50), nullable=False, unique=True)
        password = db.Column(db.String(255), nullable=False, server_default='')
        reset_password_token = db.Column(db.String(100),
                                         nullable=False,
                                         server_default='')

        # User information
        active = db.Column('is_active',
                           db.Boolean(),
                           nullable=False,
                           server_default='0')
        first_name = db.Column(db.String(100),
                               nullable=False,
                               server_default='')
        last_name = db.Column(db.String(100),
                              nullable=False,
                              server_default='')

        # Relationship
        user_emails = db.relationship('UserEmail')

    # Define UserEmail DataModel.
    class UserEmail(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

        # User email information
        email = db.Column(db.String(255), nullable=False, unique=True)
        confirmed_at = db.Column(db.DateTime())
        is_primary = db.Column(db.Boolean(), nullable=False, default=False)

        # Relationship
        user = db.relationship('User', uselist=False)

    # Create all database tables
    db.create_all()

    # Setup Flask-User
    db_adapter = SQLAlchemyAdapter(
        db, User, UserEmailClass=UserEmail)  # Register the User model
    user_manager = UserManager(db_adapter, app)  # Initialize Flask-User

    # The Home page is accessible to anyone
    @app.route('/')
    def home_page():
        return render_template_string("""
            {% extends "base.html" %}
            {% block content %}
                <h2>Home page</h2>
                <p>This page can be accessed by anyone.</p><br/>
                <p><a href={{ url_for('home_page') }}>Home page</a> (anyone)</p>
                <p><a href={{ url_for('members_page') }}>Members page</a> (login required)</p>
            {% endblock %}
            """)

    # The Members page is only accessible to authenticated users
    @app.route('/members')
    @login_required  # Use of @login_required decorator
    def members_page():
        return render_template_string("""
            {% extends "base.html" %}
            {% block content %}
                <h2>Members page</h2>
                <p>This page can only be accessed by authenticated users.</p><br/>
                <p><a href={{ url_for('home_page') }}>Home page</a> (anyone)</p>
                <p><a href={{ url_for('members_page') }}>Members page</a> (login required)</p>
            {% endblock %}
            """)

    return app
示例#18
0
文件: __init__.py 项目: fbonora/aumai
def create_app():
    app = Flask(__name__)

    app.config['SECRET_KEY'] = 'mysecretkey'
    app.config[
        'SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site_aumai.db?check_same_thread=False'
    #app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:aumai123!@mysql:3306/aumaiDB'
    app.config['SQLALCHEMY_ECHO'] = False
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    app.config['CSRF_ENABLE'] = True
    app.config['USER_ENABLE_EMAIL'] = False
    app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(minutes=5)

    formatter = logging.Formatter(
        "[%(asctime)s] {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s")
    handler = RotatingFileHandler('../aumai/logs/aumai.log',
                                  maxBytes=1000000,
                                  backupCount=5)
    handler.setLevel(logging.DEBUG)
    handler.setFormatter(formatter)
    app.logger.addHandler(handler)

    app.logger.debug('Inizializzo DB')
    db.init_app(app)

    app.logger.debug('Inizializzo Utenti')
    from .models import User
    db_adapter = SQLAlchemyAdapter(db, User)
    user_manager = UserManager(db_adapter, app)
    user_manager.login_manager.login_view = 'auth.login'

    app.logger.debug('Inizializzo Auth')
    from .auth import auth as auth_blueprint
    app.register_blueprint(auth_blueprint)

    app.logger.debug('Inizializzo Main')
    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)

    app.logger.debug('Inizializzo Responsabile')
    from .responsabile import responsabile as responsabile_blueprint
    app.register_blueprint(responsabile_blueprint)

    app.logger.debug('Inizializzo Cassiere')
    from .cassiere import cassiere as cassiere_blueprint
    app.register_blueprint(cassiere_blueprint)

    app.logger.debug('Inizializzo REST_API')
    from .rest_api import rest as rest_blueprint
    app.register_blueprint(rest_blueprint)

    app.logger.debug('Inizializzo Reports')
    from .reports import reports as report_blueprint
    app.register_blueprint(report_blueprint)

    app.logger.debug('Inizializzo Form_Validartor')
    from .form_validator import form_validator as validator_blueprint
    app.register_blueprint(validator_blueprint)

    app.logger.info('Application initialized')

    return app
示例#19
0
            return self.first_name + ' ' + self.last_name
        else:
            return self.email


class UserInvitation(db.Model):
    __tablename__ = 'user_invite'
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(255), nullable=False)
    invited_by_user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    token = db.Column(db.String(100), nullable=False, server_default='')


# Setup Flask-User
db_adapter = SQLAlchemyAdapter(db, User, UserInvitationClass=UserInvitation)
user_manager = UserManager()


class Role(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(50), unique=True)

    def __repr__(self):
        return self.name


class UserRoles(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    user_id = db.Column(db.Integer(),
                        db.ForeignKey('user.id', ondelete='CASCADE'))
    role_id = db.Column(db.Integer(),
示例#20
0
def create_app(test_config=None):  # For automated tests
    # Setup Flask and read config from ConfigClass defined above
    app = Flask(__name__)
    app.config.from_object(__name__ + '.ConfigClass')

    # Load local_settings.py if file exists         # For automated tests
    try:
        app.config.from_object('local_settings')
    except:
        pass

    # Load optional test_config                     # For automated tests
    if test_config:
        app.config.update(test_config)

    # Initialize Flask extensions
    mail = Mail(app)  # Initialize Flask-Mail
    db = SQLAlchemy(app)  # Initialize Flask-SQLAlchemy

    # Define the User data model. Make sure to add flask.ext.user UserMixin!!
    class User(db.Model, UserMixin):
        id = db.Column(db.Integer, primary_key=True)

        # User authentication information
        username = db.Column(db.String(50), nullable=False, unique=True)
        password = db.Column(db.String(255), nullable=False, server_default='')
        reset_password_token = db.Column(db.String(100),
                                         nullable=False,
                                         server_default='')

        # User email information
        email = db.Column(db.String(255), nullable=False, unique=True)
        confirmed_at = db.Column(db.DateTime())

        # User information
        is_enabled = db.Column(db.Boolean(),
                               nullable=False,
                               server_default='0')
        first_name = db.Column(db.String(100),
                               nullable=False,
                               server_default='')
        last_name = db.Column(db.String(100),
                              nullable=False,
                              server_default='')

        # Relationships
        roles = db.relationship('Role',
                                secondary='user_roles',
                                backref=db.backref('users', lazy='dynamic'))

        def is_active(self):
            return self.is_enabled

    # Define the Role data model
    class Role(db.Model):
        id = db.Column(db.Integer(), primary_key=True)
        name = db.Column(db.String(50), unique=True)

    # Define the UserRoles data model
    class UserRoles(db.Model):
        id = db.Column(db.Integer(), primary_key=True)
        user_id = db.Column(db.Integer(),
                            db.ForeignKey('user.id', ondelete='CASCADE'))
        role_id = db.Column(db.Integer(),
                            db.ForeignKey('role.id', ondelete='CASCADE'))

    # Reset all the database tables
    db.create_all()

    # Setup Flask-User
    db_adapter = SQLAlchemyAdapter(db, User)
    user_manager = UserManager(db_adapter, app)

    # Create 'user007' user with 'secret' and 'agent' roles
    if not User.query.filter(User.username == 'user007').first():
        user1 = User(username='******',
                     email='*****@*****.**',
                     is_enabled=True,
                     password=user_manager.hash_password('Password1'))
        user1.roles.append(Role(name='secret'))
        user1.roles.append(Role(name='agent'))
        db.session.add(user1)
        db.session.commit()

    # The Home page is accessible to anyone
    @app.route('/')
    def home_page():
        return render_template_string("""
            {% extends "base.html" %}
            {% block content %}
                <h2>Home page</h2>
                <p>This page can be accessed by anyone.</p><br/>
                <p><a href={{ url_for('home_page') }}>Home page</a> (anyone)</p>
                <p><a href={{ url_for('members_page') }}>Members page</a> (login required)</p>
                <p><a href={{ url_for('special_page') }}>Special page</a> (login with username 'user007' and password 'Password1')</p>
            {% endblock %}
            """)

    # The Members page is only accessible to authenticated users
    @app.route('/members')
    @login_required  # Use of @login_required decorator
    def members_page():
        return render_template_string("""
            {% extends "base.html" %}
            {% block content %}
                <h2>Members page</h2>
                <p>This page can only be accessed by authenticated users.</p><br/>
                <p><a href={{ url_for('home_page') }}>Home page</a> (anyone)</p>
                <p><a href={{ url_for('members_page') }}>Members page</a> (login required)</p>
                <p><a href={{ url_for('special_page') }}>Special page</a> (login with username 'user007' and password 'Password1')</p>
            {% endblock %}
            """)

    # The Special page requires a user with 'special' and 'sauce' roles or with 'special' and 'agent' roles.
    @app.route('/special')
    @roles_required('secret',
                    ['sauce', 'agent'])  # Use of @roles_required decorator
    def special_page():
        return render_template_string("""
            {% extends "base.html" %}
            {% block content %}
                <h2>Special Page</h2>
                <p>This page can only be accessed by user007.</p><br/>
                <p><a href={{ url_for('home_page') }}>Home page</a> (anyone)</p>
                <p><a href={{ url_for('members_page') }}>Members page</a> (login required)</p>
                <p><a href={{ url_for('special_page') }}>Special page</a> (login with username 'user007' and password 'Password1')</p>
            {% endblock %}
            """)

    return app
示例#21
0
def create_app(extra_config_settings={}):
    """Create a Flask applicaction.
    """
    # Instantiate Flask
    app = Flask(__name__)

    # Load App Config settings
    # Load common settings from 'app/settings.py' file
    app.config.from_object('app.settings')
    # Load local settings from 'app/local_settings.py'
    app.config.from_object('app.local_settings')
    # Load extra config settings from 'extra_config_settings' param
    app.config.update(extra_config_settings)

    # Setup Flask-Extensions -- do this _after_ app config has been loaded

    # Setup Flask-SQLAlchemy
    db.init_app(app)

    # Setup Flask-Migrate
    migrate.init_app(app, db)

    # Setup Flask-Mail
    mail.init_app(app)

    # Setup WTForms CSRFProtect
    csrf_protect.init_app(app)

    # Initialize Flask-BabelEx
    babel = Babel(app)
    app.config['BABEL_DEFAULT_LOCALE'] = 'es'

    # Register blueprints
    from app.views.misc_views import main_blueprint
    app.register_blueprint(main_blueprint)

    # Define bootstrap_is_hidden_field for flask-bootstrap's bootstrap_wtf.html
    from wtforms.fields import HiddenField
    Bootstrap(app)

    def is_hidden_field_filter(field):
        return isinstance(field, HiddenField)

    app.jinja_env.globals['bootstrap_is_hidden_field'] = is_hidden_field_filter

    # Setup an error-logger to send emails to app.config.ADMINS
    init_email_error_handler(app)

    # Setup Flask-User to handle user account related forms
    from .models.user_models import User, MyRegisterForm
    from .views.misc_views import user_profile_page

    db_adapter = SQLAlchemyAdapter(db, User)  # Setup the SQLAlchemy DB Adapter
    user_manager = UserManager(
        db_adapter,
        app,  # Init Flask-User and bind to app
        register_form=
        MyRegisterForm,  # using a custom register form with UserProfile fields
        user_profile_view_function=user_profile_page,
    )
    # API REST
    api = Api(app)
    add_resources_api_rest(api)

    return app
示例#22
0
from datetime import datetime
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_user import UserManager
from config import Config

app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
migrate = Migrate(app, db)

from app import models

user_manager = UserManager(app, db, models.User, RoleClass=models.Role)

from app import routes

months = [
    'januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus',
    'september', 'oktober', 'november', 'december'
]


# Parse the timestamp to a readable date
def parse_date(date):
    day = str(date.day)
    month = months[date.month - 1]
    year = str(date.year)
    return day + " " + month + " " + year
def create_app():
    
    
    # Create Flask app load app.config
    app = Flask(__name__)
    app.config.from_object(__name__+'.ConfigClass')

    # Initialize Flask-BabelEx
    babel = Babel(app)
    # Initialize Flask-SQLAlchemy
    @babel.localeselector
    def get_locale():
       translations = [str(translation) for translation in babel.list_translations()]
    #   return request.accept_languages.best_match(translations)
    # @babel.localeselector
    #def get_locale():
    #   if request.args.get('lang'):
    #       session['lang'] = request.args.get('lang')
    #       return session.get('lang', 'tr')

    db = SQLAlchemy(app)

    # Define the User data-model.
    # NB: Make sure to add flask_user UserMixin !!!
    class User(db.Model, UserMixin):
        __tablename__ = 'users'
        id = db.Column(db.Integer, primary_key=True)
        active = db.Column('is_active', db.Boolean(), nullable=False, server_default='1')

        # User authentication information. The collation='NOCASE' is required
        # to search case insensitively when USER_IFIND_MODE is 'nocase_collation'.
        email = db.Column(db.String(255, collation='NOCASE'), nullable=False, unique=True)
        email_confirmed_at = db.Column(db.DateTime())
        password = db.Column(db.String(255), nullable=False, server_default='')

        # User information
        first_name = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='')
        last_name = db.Column(db.String(100, collation='NOCASE'), nullable=False, server_default='')

        # Define the relationship to Role via UserRoles
        roles = db.relationship('Role', secondary='user_roles')

    # Define the Role data-model
    class Role(db.Model):
        __tablename__ = 'roles'
        id = db.Column(db.Integer(), primary_key=True)
        name = db.Column(db.String(50), unique=True)

    # Define the UserRoles association table
    class UserRoles(db.Model):
        __tablename__ = 'user_roles'
        id = db.Column(db.Integer(), primary_key=True)
        user_id = db.Column(db.Integer(), db.ForeignKey('users.id', ondelete='CASCADE'))
        role_id = db.Column(db.Integer(), db.ForeignKey('roles.id', ondelete='CASCADE'))

    # Setup Flask-User and specify the User data-model
    user_manager = UserManager(app, db, User)

    # Create all database tables
    db.create_all()

    # Create '*****@*****.**' user with no roles
    if not User.query.filter(User.email == '*****@*****.**').first():
        user = User(
            email='*****@*****.**',
            email_confirmed_at=datetime.datetime.utcnow(),
            password=user_manager.hash_password('Password1'),
        )
        db.session.add(user)
        db.session.commit()

    # Create '*****@*****.**' user with 'Admin' and 'Agent' roles
    if not User.query.filter(User.email == '*****@*****.**').first():
        user = User(
            email='*****@*****.**',
            email_confirmed_at=datetime.datetime.utcnow(),
            password=user_manager.hash_password('Password1'),
        )
        user.roles.append(Role(name='Admin'))
        user.roles.append(Role(name='Agent'))
        db.session.add(user)
        db.session.commit()


    @app.route('/')
    def home_page():
        return render_template_string("""
                    {% extends "flask_user_layout.html" %}
                    {% block content %}
                        <h2>{%trans%}Ana sayfa{%endtrans%}</h2>
                        <h1>{%trans%}Bu web sitesinin anasayfasıdır{%endtrans%}</h1>
                        <p><a href={{ url_for('user.register') }}>{%trans%}Kayıt ol{%endtrans%}</a></p>
                        <p><a href={{ url_for('user.login') }}>{%trans%}Giriş Yap{%endtrans%}</a></p>
                        <p><a href={{ url_for('home_page') }}>{%trans%}Ana sayfa{%endtrans%}</a> (Herkes erişebilir)</p>
                        <p><a href={{ url_for('member_page') }}>{%trans%}Üye sayfası{%endtrans%}</a> (Giriş gerekli: [email protected] / Password1)</p>
                        <p><a href={{ url_for('admin_page') }}>{%trans%}Admin sayfası{%endtrans%}</a> (Rol gerekli: [email protected] / Password1)</p>
                        <p><a href={{ url_for('user.logout') }}>{%trans%}Çıkış{%endtrans%}</a></p>
                    {% endblock %}
                    """)

        # The Members page is only accessible to authenticated users
    @app.route('/members')
    @login_required    # Use of @login_required decorator
    def member_page():
        return render_template_string("""
                {% extends "flask_user_layout.html" %}
                {% block content %}
                    <h2>{%trans%}Üyeler sayfası {%endtrans%}</h2>
                    <h1>{%trans%}Sisteme giriş yapanlar bu sayfayı görüntüleyebilir{%endtrans%}</h1>
                    <p><a href={{ url_for('user.register') }}>{%trans%}Kayıt ol{%endtrans%}</a></p>
                    <p><a href={{ url_for('user.login') }}>{%trans%}Giriş Yap{%endtrans%}</a></p>
                    <p><a href={{ url_for('home_page') }}>{%trans%}Ana sayfa{%endtrans%}</a> (Herkes erişebilir)</p>
                    <p><a href={{ url_for('member_page') }}>{%trans%}Üye sayfası{%endtrans%}</a> (Giriş gerekli: [email protected] / Password1)</p>
                    <p><a href={{ url_for('admin_page') }}>{%trans%}Admin sayfası{%endtrans%}</a> (Rol gerekli: [email protected] / Password1)</p>
                    <p><a href={{ url_for('user.logout') }}>{%trans%}Çıkış{%endtrans%}</a></p>
                {% endblock %}
                """)

    # The Admin page requires an 'Admin' role.
    @app.route('/admin')
    @roles_required('Admin') #Use of @roles_required decorator
    def admin_page():
        return render_template_string("""
                {% extends "flask_user_layout.html" %}
                {% block content %}
                    <h2>{%trans%}Admin Sayfası{%endtrans%}</h2>
                    <h1>{%trans%}Bu yalnızca adminlerin giriş yapabildiği bir sayfadır{%endtrans%}</h1>
                    <p><a href={{ url_for('user.register') }}>{%trans%}Kayıt ol{%endtrans%}</a></p>
                    <p><a href={{ url_for('user.login') }}>{%trans%}Giriş Yap{%endtrans%}</a></p>
                    <p><a href={{ url_for('home_page') }}>{%trans%}Ana sayfa{%endtrans%}</a> (Herkes erişebilir)</p>
                    <p><a href={{ url_for('member_page') }}>{%trans%}Üye sayfası{%endtrans%}</a> (Giriş gerekli: [email protected] / Password1)</p>
                    <p><a href={{ url_for('admin_page') }}>{%trans%}Admin sayfası{%endtrans%}</a> (Rol gerekli: [email protected] / Password1)</p>
                    <p><a href={{ url_for('user.logout') }}>{%trans%}Çıkış{%endtrans%}</a></p>
                {% endblock %}
                """)

    return app
示例#24
0
limiter = Limiter(app,
                  key_func=get_remote_address,
                  default_limits=["2000 per hour"])

#babel = Babel(app)
db = SQLAlchemy(app)
#mysql = MySQL(app)
migrate = Migrate(app, db)
login = LoginManager(app)
login.login_view = 'login'
login.login_message = ""
app.jinja_env.autoescape = True

from app.models import User, Role, UserRoles, MyModelView, Messages

user_manager = UserManager(app, db,
                           User)  #initialize flask-user implementation

# database creation and user addition
# Create all database tables
db.create_all()

# chat
socketio = SocketIO(app)


@socketio.on('message')
def handle_message(message):
    print('received message: ' + str(message))
    status = "Pending"
    msg = Messages(message=message["message"],
                   username=message["user_name"],
示例#25
0
from application.items import models
from application.items import views

from application.auth import models
from application.auth import views

from application.recipes import models
from application.recipes import views

# kirjautuminen
from application.auth.models import User, Role

from flask_login import LoginManager
from flask_user import UserManager
user_manager = UserManager(app, db, User)
login_manager = LoginManager()
login_manager.init_app(app)

login_manager.login_view = "auth_login"
login_manager.login_message = "Please login to use this functionality."


@login_manager.user_loader
def load_user(user_id):
    return User.query.get(user_id)


# luodaan taulut tarvittaessa
try:
    db.create_all()
示例#26
0
    # User email information
    email = db.Column(db.String(255), nullable=False, unique=True)
    confirmed_at = db.Column(db.DateTime())

    # User information
    active = db.Column('is_active', db.Boolean(), nullable=False, server_default='0')
    first_name = db.Column(db.String(100), nullable=False, server_default='')
    last_name = db.Column(db.String(100), nullable=False, server_default='')

# Create all database tables
db.create_all()

# Setup Flask-User
db_adapter = SQLAlchemyAdapter(db, User)        # Register the User model
user_manager = UserManager(db_adapter, app)     # Initialize Flask-User


@app.route("/viz")
# @login_required
def viz():
    # official_file = "official.csv"
    # unofficial_file = "un_official.csv"
    # article_file = "articles.csv"
    # if session.get('official'):
    #     official_file = session["official"]
    # if session.get('unofficial'):
    #     unofficial_file = session["unofficial"]
    # if session.get('article'):
    #     article_file = session["article"]
示例#27
0
def create_app():
    """ Flask application factory """
    
    # Create Flask app load app.config
    app = Flask(__name__)
    app.config.from_object(__name__+'.ConfigClass')

    # Initialize Flask-SQLAlchemy
    db = SQLAlchemy(app)

    # Define the User data-model.
    # NB: Make sure to add flask_user UserMixin !!!
    class User(db.Model, UserMixin):
        __tablename__ = 'users'
        id = db.Column(db.Integer, primary_key=True)
        active = db.Column('is_active', db.Boolean(), nullable=False, server_default='1')

        # User authentication information. The collation='NOCASE' is required
        # to search case insensitively when USER_IFIND_MODE is 'nocase_collation'.
        username = db.Column(db.String(255, collation='NOCASE'), nullable=False, unique=True)
        password = db.Column(db.String(255), nullable=False, server_default='')

        # Define the relationship to Role via UserRoles
        roles = db.relationship('Role', secondary='user_roles')

    # Define the Role data-model
    class Role(db.Model):
        __tablename__ = 'roles'
        id = db.Column(db.Integer(), primary_key=True)
        name = db.Column(db.String(50), unique=True)

    # Define the UserRoles association table
    class UserRoles(db.Model):
        __tablename__ = 'user_roles'
        id = db.Column(db.Integer(), primary_key=True)
        user_id = db.Column(db.Integer(), db.ForeignKey('users.id', ondelete='CASCADE'))
        role_id = db.Column(db.Integer(), db.ForeignKey('roles.id', ondelete='CASCADE'))

    # Setup Flask-User and specify the User data-model
    user_manager = UserManager(app, db, User)

    # Create all database tables
    db.create_all()

    # Create '*****@*****.**' user with no roles
    if not User.query.filter(User.username == 'member').first():
        user = User(
            username='******',
            password=user_manager.hash_password('Password1'),
        )
        db.session.add(user)
        db.session.commit()

    # Create '*****@*****.**' user with 'Admin' and 'Agent' roles
    if not User.query.filter(User.username == 'admin').first():
        user = User(
            username='******',
            password=user_manager.hash_password('Password1'),
        )
        user.roles.append(Role(name='Admin'))
        user.roles.append(Role(name='Agent'))
        db.session.add(user)
        db.session.commit()

    # The Home page is accessible to anyone
    @app.route('/')
    def home_page():
        return render_template_string("""
                {% extends "flask_user_layout.html" %}
                {% block content %}
                    <h2>{%trans%}Home page{%endtrans%}</h2>
                    <p><a href={{ url_for('user.register') }}>{%trans%}Register{%endtrans%}</a></p>
                    <p><a href={{ url_for('user.login') }}>{%trans%}Sign in{%endtrans%}</a></p>
                    <p><a href={{ url_for('home_page') }}>{%trans%}Home Page{%endtrans%}</a> (accessible to anyone)</p>
                    <p><a href={{ url_for('member_page') }}>{%trans%}Member Page{%endtrans%}</a> (login_required: [email protected] / Password1)</p>
                    <p><a href={{ url_for('admin_page') }}>{%trans%}Admin Page{%endtrans%}</a> (role_required: [email protected] / Password1')</p>
                    <p><a href={{ url_for('user.logout') }}>{%trans%}Sign out{%endtrans%}</a></p>
                {% endblock %}
                """)

    # The Members page is only accessible to authenticated users
    @app.route('/members')
    @login_required    # Use of @login_required decorator
    def member_page():
        return render_template_string("""
                {% extends "flask_user_layout.html" %}
                {% block content %}
                    <h2>{%trans%}Members page{%endtrans%}</h2>
                    <p><a href={{ url_for('user.register') }}>{%trans%}Register{%endtrans%}</a></p>
                    <p><a href={{ url_for('user.login') }}>{%trans%}Sign in{%endtrans%}</a></p>
                    <p><a href={{ url_for('home_page') }}>{%trans%}Home Page{%endtrans%}</a> (accessible to anyone)</p>
                    <p><a href={{ url_for('member_page') }}>{%trans%}Member Page{%endtrans%}</a> (login_required: [email protected] / Password1)</p>
                    <p><a href={{ url_for('admin_page') }}>{%trans%}Admin Page{%endtrans%}</a> (role_required: [email protected] / Password1')</p>
                    <p><a href={{ url_for('user.logout') }}>{%trans%}Sign out{%endtrans%}</a></p>
                {% endblock %}
                """)

    # The Admin page requires an 'Admin' role.
    @app.route('/admin')
    @roles_required('Admin')    # Use of @roles_required decorator
    def admin_page():
        return render_template_string("""
                {% extends "flask_user_layout.html" %}
                {% block content %}
                    <h2>{%trans%}Admin Page{%endtrans%}</h2>
                    <p><a href={{ url_for('user.register') }}>{%trans%}Register{%endtrans%}</a></p>
                    <p><a href={{ url_for('user.login') }}>{%trans%}Sign in{%endtrans%}</a></p>
                    <p><a href={{ url_for('home_page') }}>{%trans%}Home Page{%endtrans%}</a> (accessible to anyone)</p>
                    <p><a href={{ url_for('member_page') }}>{%trans%}Member Page{%endtrans%}</a> (login_required: [email protected] / Password1)</p>
                    <p><a href={{ url_for('admin_page') }}>{%trans%}Admin Page{%endtrans%}</a> (role_required: [email protected] / Password1')</p>
                    <p><a href={{ url_for('user.logout') }}>{%trans%}Sign out{%endtrans%}</a></p>
                {% endblock %}
                """)

    return app
示例#28
0
from app import app
from datetime import datetime
from flask import render_template, flash, redirect
from app.models import User, Role, db
from flask_user import SQLAlchemyAdapter, UserManager, login_required, roles_required
from flask import Blueprint

editor = Blueprint('editor',
                   __name__,
                   url_prefix="/editor",
                   template_folder='templates')
db_adapter = SQLAlchemyAdapter(db, User)
user_manager = UserManager(db_adapter, app)


# Cria os usuarios de teste
@app.before_first_request
def setup():
    # cria o usuario '*****@*****.**' com role de editor
    if not User.query.filter(User.email == '*****@*****.**').first():
        user = User(email='*****@*****.**',
                    email_confirmed_at=datetime.now(),
                    password=user_manager.hash_password('Password1'),
                    username='******',
                    first_name='First',
                    last_name='Member',
                    is_enabled=True)

        user.roles.append(Role(name='Editor'))
        db.session.add(user)
        db.session.commit()
示例#29
0
def create_app(test_config=None):  # For automated tests
    # Setup Flask and read config from ConfigClass defined above
    app = Flask(__name__)
    app.config.from_object(__name__ + '.ConfigClass')

    # Load local_settings.py if file exists         # For automated tests
    try:
        app.config.from_object('local_settings')
    except:
        pass

    # Load optional test_config                     # For automated tests
    if test_config:
        app.config.update(test_config)

    # Initialize Flask extensions
    db = SQLAlchemy(app)  # Initialize Flask-SQLAlchemy
    mail = Mail(app)  # Initialize Flask-Mail
    babel = Babel(app)  # Initialize Flask-Babel

    @babel.localeselector
    def get_locale():
        translations = [
            str(translation) for translation in babel.list_translations()
        ]
        language = request.accept_languages.best_match(translations)
        return language

    # Define the User data model. Make sure to add flask.ext.user UserMixin !!!
    class User(db.Model, UserMixin):
        id = db.Column(db.Integer, primary_key=True)

        # User authentication information
        username = db.Column(db.String(50), nullable=False, unique=True)
        password = db.Column(db.String(255), nullable=False, server_default='')
        reset_password_token = db.Column(db.String(100),
                                         nullable=False,
                                         server_default='')

        # User email information
        email = db.Column(db.String(255), nullable=False, unique=True)
        confirmed_at = db.Column(db.DateTime())

        # User information
        active = db.Column('is_active',
                           db.Boolean(),
                           nullable=False,
                           server_default='0')
        first_name = db.Column(db.String(100),
                               nullable=False,
                               server_default='')
        last_name = db.Column(db.String(100),
                              nullable=False,
                              server_default='')

    # Create all database tables
    db.create_all()

    # Setup Flask-User
    db_adapter = SQLAlchemyAdapter(db, User)  # Select database adapter
    user_manager = UserManager(db_adapter,
                               app)  # Init Flask-User and bind to app

    # The Home page is accessible to anyone
    @app.route('/')
    def home_page():
        return render_template_string("""
            {% extends "base.html" %}
            {% block content %}
                <h2>{%trans%}Home Page{%endtrans%}</h2>
                {% if current_user.is_authenticated() %}
                <p> <a href="{{ url_for('user_profile_page') }}">
                    {%trans%}Profile Page{%endtrans%}</a></p>
                <p> <a href="{{ url_for('user.logout') }}">
                    {%trans%}Sign out{%endtrans%}</a></p>
                {% else %}
                <p> <a href="{{ url_for('user.login') }}">
                    {%trans%}Sign in or Register{%endtrans%}</a></p>
                {% endif %}
            {% endblock %}
            """)
        if current_user.is_authenticated():
            return redirect(url_for('user_profile_page'))
        else:
            return redirect(url_for('user.login'))

# The Profile page requires a logged-in user

    @app.route('/user/profile')
    @login_required  # Use of @login_required decorator
    @confirm_email_required
    def user_profile_page():
        return render_template_string("""
            {% extends "base.html" %}
            {% block content %}
                <h2>{%trans%}Profile Page{%endtrans%}</h2>
                <p> {%trans%}Hello{%endtrans%}
                    {{ current_user.username or current_user.email }},</p>
                <p> <a href="{{ url_for('home_page') }}">
                    {%trans%}Home Page{%endtrans%}</a></p>
                <p> <a href="{{ url_for('user.change_username') }}">
                    {%trans%}Change username{%endtrans%}</a></p>
                <p> <a href="{{ url_for('user.change_password') }}">
                    {%trans%}Change password{%endtrans%}</a></p>
                <p> <a href="{{ url_for('user.logout') }}">
                    {%trans%}Sign out{%endtrans%}</a></p>
            {% endblock %}
            """)

    return app
示例#30
0
def create_app(test_config=None):  # For automated tests
    # Setup Flask and read config from ConfigClass defined above
    app = Flask(__name__)
    app.config.from_object(__name__ + '.ConfigClass')

    # Load local_settings.py if file exists         # For automated tests
    try:
        app.config.from_object('local_settings')
    except ImportError:
        pass

    # Load optional test_config                     # For automated tests
    if test_config:
        app.config.update(test_config)

    # Initialize Flask extensions
    db = SQLAlchemy(app)  # Initialize Flask-SQLAlchemy
    babel = Babel(app)  # Initialize Flask-BabelEx

    @babel.localeselector
    def get_locale():
        translations = [
            str(translation) for translation in babel.list_translations()
        ]
        language = request.accept_languages.best_match(translations)
        return language

    # Define the User data-model. Make sure to add flask_user UserMixin !!!
    class User(db.Model, UserMixin):
        __tablename__ = 'users'
        id = db.Column(db.Integer, primary_key=True)

        # User authentication information. The collation='NOCASE' is required
        # to search case insensitively when USER_IFIND_MODE is 'nocase_collation'.
        username = db.Column(db.String(50), nullable=True, unique=True)
        password = db.Column(db.String(255), nullable=False, server_default='')

        # User email information. The collation='NOCASE' is required
        # to search case insensitively when USER_IFIND_MODE is 'nocase_collation'.
        email = db.Column(db.String(255, collation='NOCASE'),
                          nullable=False,
                          unique=True)
        email_confirmed_at = db.Column(db.DateTime(), nullable=True)

        # User information
        is_enabled = db.Column(db.Boolean(),
                               nullable=False,
                               server_default='0')
        first_name = db.Column(db.String(100, collation='NOCASE'),
                               nullable=False,
                               server_default='')
        last_name = db.Column(db.String(100, collation='NOCASE'),
                              nullable=False,
                              server_default='')

    class UserInvitation(db.Model):
        __tablename__ = 'user_invitations'
        id = db.Column(db.Integer, primary_key=True)
        # UserInvitation email information. The collation='NOCASE' is required
        # to search case insensitively when USER_IFIND_MODE is 'nocase_collation'.
        email = db.Column(db.String(255, collation='NOCASE'), nullable=False)
        # save the user of the invitee
        invited_by_user_id = db.Column(db.Integer, db.ForeignKey('users.id'))

    # Create all database tables
    db.create_all()

    # Setup Flask-User
    db_adapter = SQLAlchemyAdapter(
        db, User,
        UserInvitationClass=UserInvitation)  # Select database adapter
    user_manager = UserManager(db_adapter,
                               app)  # Init Flask-User and bind to app

    @user_registered.connect_via(app)
    def after_registered_hook(sender, user, user_invitation):
        sender.logger.info("USER REGISTERED")

    @user_sent_invitation.connect_via(app)
    def after_invitation_hook(sender, **extra):
        sender.logger.info("USER SENT INVITATION")

    # The Home page is accessible to anyone
    @app.route('/')
    def home_page():
        return render_template_string("""
            {% extends "flask_user_layout.html" %}
            {% block content %}
                <h2>{%trans%}Home Pages{%endtrans%}</h2>
                {% if call_or_get(current_user.is_authenticated) %}
                <p> <a href="{{ url_for('user_profile_page') }}">
                    {%trans%}Profile Page{%endtrans%}</a></p>
                <p> <a href="{{ url_for('user.logout') }}">
                    {%trans%}Sign out{%endtrans%}</a></p>
                {% else %}
                <p> <a href="{{ url_for('user.login') }}">
                    {%trans%}Sign in or Register{%endtrans%}</a></p>
                {% endif %}
            {% endblock %}
            """)
        user_manager = current_app.user_manager
        if user_manager.call_or_get(current_user.is_authenticated):
            return redirect(url_for('user_profile_page'))
        else:
            return redirect(url_for('user.login'))

    # The Profile page requires a logged-in user
    @app.route('/user/profiles')
    @login_required  # Use of @login_required decorator
    @confirmed_email_required
    def user_profile_page():
        return render_template_string("""
            {% extends "flask_user_layout.html" %}
            {% block content %}
                <h2>{%trans%}Profile Page{%endtrans%}</h2>
                <p> {%trans%}Hello{%endtrans%}
                    {{ current_user.username or current_user.email }},</p>
                <p> <a href="{{ url_for('home_page') }}">
                    {%trans%}Home Page{%endtrans%}</a></p>
                <p> <a href="{{ url_for('user.change_username') }}">
                    {%trans%}Change username{%endtrans%}</a></p>
                <p> <a href="{{ url_for('user.change_password') }}">
                    {%trans%}Change password{%endtrans%}</a></p>
                <p> <a href="{{ url_for('user.invite_user') }}">
                    {%trans%}Invite User{%endtrans%}</a></p>
                <p> <a href="{{ url_for('user.logout') }}">
                    {%trans%}Sign out{%endtrans%}</a></p>
            {% endblock %}
            """)

    return app