diff --git a/app/__init__.py b/app/__init__.py index e69de29..0cd4822 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -0,0 +1,26 @@ +from flask import Flask, render_template, session +from flask_sqlalchemy import SQLAlchemy +from locale import setlocale, LC_ALL +from datetime import datetime + +app = Flask(__name__) +app.config.from_object('config') + +# Configura locale para pt_BR +setlocale(LC_ALL, "pt_BR.UTF-8") + +db = SQLAlchemy(app) + +@app.errorhandler(404) +def not_found(error): + return render_template('404.html'), 404 + +@app.context_processor +def contexto_para_templates(): + return dict( + login=session.get('login') if session.get('login') else "", + data=unicode(datetime.today().strftime( + "%A, %d de %B de %Y" + ), 'utf8') + ) + diff --git a/app/__init__.pyc b/app/__init__.pyc new file mode 100644 index 0000000..ef8e162 Binary files /dev/null and b/app/__init__.pyc differ diff --git a/app/libs/__init__.py b/app/libs/__init__.py new file mode 100644 index 0000000..633f866 --- /dev/null +++ b/app/libs/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- + diff --git a/app/libs/forms.py b/app/libs/forms.py new file mode 100644 index 0000000..68e48d9 --- /dev/null +++ b/app/libs/forms.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- + +from flask.ext.wtf import Form, TextField, PasswordField, validators + +class FormLogin(Form): + """ Formulário de login """ + login = TextField('login', [validators.Length(min=3, max=30)]) + senha = PasswordField('senha', [validators.Length(min=3, max=30)]) \ No newline at end of file diff --git a/app/models.py b/app/models.py new file mode 100644 index 0000000..d1cc12e --- /dev/null +++ b/app/models.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- + +from app import db + +class Usuario(db.Model): + __tablename__ = 'usuario' + id = db.Column(db.Integer, primary_key=True) + ligado = db.Column(db.Boolean) + login = db.Column(db.String(50), unique=True) + senha = db.Column(db.String(200)) + perfil = db.Column(db.String(80)) + nome = db.Column(db.String(150)) + email = db.Column(db.String(120)) + telefone = db.Column(db.String(15)) + descricao = db.Column(db.Text) + grupo = db.Column(db.Integer) + + def __init__( + self, + ligado, + login, + senha, + perfil, + nome, + email, + telefone, + descricao, + grupo + ): + self.ligado = ligado + self.login = login + self.senha = senha + self.perfil = perfil + self.nome = nome + self.email = email + self.telefone = telefone + self.descricao = descricao + self.grupo = grupo + + def __repr__(self): + return "" % ( + self.login, + self.perfil, + self.nome, + self.email, + self.telefone + ) \ No newline at end of file diff --git a/templates/base.html b/app/templates/404.html similarity index 100% rename from templates/base.html rename to app/templates/404.html diff --git a/templates/login.html b/app/templates/base.html similarity index 100% rename from templates/login.html rename to app/templates/base.html diff --git a/app/templates/login.html b/app/templates/login.html new file mode 100644 index 0000000..062b097 --- /dev/null +++ b/app/templates/login.html @@ -0,0 +1,19 @@ + + + Tela de Login + + + +
+ {{ form.hidden_tag() }} + + {{ form.login(size=30) }} + + {{ form.senha(size=30) }} + + + +
+ + + \ No newline at end of file diff --git a/app/views/login.py b/app/views/login.py new file mode 100644 index 0000000..c1e74cd --- /dev/null +++ b/app/views/login.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- + +from flask import request, redirect, render_template, url_for, flash +from flask.ext.login import (LoginManager, login_required, + login_user, logout_user, UserMixin) + +from app import app +from app.libs.forms import FormLogin +import app.models as modelos + +# flask-login - Configurações de Autenticação: +login_manager = LoginManager() +login_manager.setup_app(app) +login_manager.login_view = "login" + +class User(UserMixin): + def __init__(self, name, id, active=True): + self.name = name + self.id = id + self.active = active + + def is_active(self): + return self.active + +@login_manager.user_loader +def load_user(id): + usuario = modelos.Usuario.query.get(int(id)) + return User(usuario.login, usuario.id) + +login_manager.setup_app(app) + +@app.route('/login', methods=['GET', 'POST']) +def login(): + form = FormLogin(request.form) + if request.method == 'POST' and form.validate(): + _login = request.form['login'] + _senha = request.form['senha'] + + _em_db = modelos.Usuario.query.filter_by(login = _login).first() + if (_em_db): + if ( _login == _em_db.login and _senha == _em_db.senha): + login_user(User(_em_db.login, _em_db.id)) + redirect(request.args.get("next") or url_for("index")) + else: + flash(unicode("Senha Invalida", "UTF-8")) + return render_template("login.html", form=form) + else: + flash(unicode("Usuário não existe", "UTF-8")) + return render_template("login.html", form=form) + +@app.route('/logout') +@login_required +def logout(): + """ Define a remoção da sessão do usuário """ + logout_user() + return redirect('/') \ No newline at end of file diff --git a/app/views/main.py b/app/views/main.py new file mode 100644 index 0000000..2e17234 --- /dev/null +++ b/app/views/main.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- + +from flask import render_template +from app import app + +@app.route("/") +def index(): + return render_template('principal.html') \ No newline at end of file diff --git a/config.py b/config.py new file mode 100644 index 0000000..ca77939 --- /dev/null +++ b/config.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +DEBUG = False + +SECRET_KEY = 'niuddm7nh235hybh786f67vtbcawkiknl/' + +PATH_DB = os.path.join("./db", "main.db") +SQLALCHEMY_DATABASE_URI = 'sqlite:///%s' % (PATH_DB) \ No newline at end of file diff --git a/runserver.py b/runserver.py index e69de29..72d9cd0 100644 --- a/runserver.py +++ b/runserver.py @@ -0,0 +1,6 @@ +from app import app +from app import db + +db.create_all() + +app.run(host='0.0.0.0', port=8000, debug=True) \ No newline at end of file