def create_app(settings_override=None): """Returns the kb dashboard application instance""" app = factory.create_app(__name__, __path__, settings_override) # Init assets assets.init_app(app) # csrf.init_app(app) setup_admin(app) app.json_encoder = JSONEncoder # Register custom error handlers if not app.debug: for e in [500, 404]: app.errorhandler(e)(handle_error) app.errorhandler(KBError)(on_kb_error) app.errorhandler(KBFormError)(on_kb_form_error) return app
from utils import APIException, generate_sitemap from admin import setup_admin from models import db, User, Personajes, Planetas, Favoritos import datetime from werkzeug.security import generate_password_hash, check_password_hash from flask_jwt_extended import JWTManager, create_access_token, jwt_required, get_jwt_identity #from models import Person app = Flask(__name__) app.url_map.strict_slashes = False app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('DB_CONNECTION_STRING') app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False MIGRATE = Migrate(app, db) db.init_app(app) CORS(app) setup_admin(app) jwt = JWTManager(app) # Handle/serialize errors like a JSON object @app.errorhandler(APIException) def handle_invalid_usage(error): return jsonify(error.to_dict()), error.status_code # generate sitemap with all your endpoints @app.route('/') def sitemap(): return generate_sitemap(app)
class MyModelView(ModelView): def is_accessible(self): user = User.query.get(1) # print(user.is_active()) return user.active app = Flask(__name__) app.url_map.strict_slashes = False app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('DB_CONNECTION_STRING') app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.config.from_mapping(CLOUDINARY_URL=os.environ.get('CLOUDINARY_URL')) MIGRATE = Migrate(app, db) db.init_app(app) CORS(app) setup_admin(app, MyModelView) login = LoginManager(app) # login.init_app(app) @login.user_loader def load_user(user_id): return User.query.get(user_id) # Handle/serialize errors like a JSON object @app.errorhandler(APIException) def handle_invalid_usage(error): return jsonify(error.to_dict()), error.status_code
if db_user.email != email: return jsonify({ "status": "failed", "msj": "Email does not match" }), 400 if not check_password_hash(db_user.password, passw): return jsonify({"status": "failed", "msj": "Password is invalid"}), 401 #crear token expiration = datetime.timedelta( days=3) #Se especifica el tiempo que ese token estará activo token = create_access_token( identity=db_user.user_name, expires_delta=expiration ) #se especifica a quien se le va a asignar el toque y el tiempo de expiración data = { "status": "success", "user": db_user.serialize_users(), "token": token, "expires": expiration.total_seconds() * 1000 #se pasa a segundos y se multiplica por mil, pq se debe entregar en milisegundos al browser } return jsonify(data), 200 setup_admin(app) #Se llama a admin if __name__ == "__main__": app.run(debug=True)
#JWT-SECURITY from flask_jwt_extended import JWTManager, create_access_token, jwt_required, get_jwt_identity import datetime app = Flask(__name__) #Creo nueva instancia del servidor Flask app.url_map.strict_slashes = False #DUDA: Que significa? app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get( 'DB_CONNECTION_STRING' ) #Para conectarme a la DB, arcivo env.example crea el enlace. app.config[ 'SQLALCHEMY_TRACK_MODIFICATIONS'] = False #Cuando yo hago modificaciones en models.py, va a crear la migracion de la DB. DUDA: Conectada a pipenv run migrate? MIGRATE = Migrate(app, db) #Se lleva a cabo la migracion. db.init_app(app) #Se inicializa la app. CORS(app) #DUDA: CROSS ORIGIN RESOURCE SHARING. No se que putas?? setup_admin(app) #DUDA: Maneja la funcionalidad de la app por medio de flask. #Set up the FLASK-JWT-Extended extension app.config["JWT_SECRET_KEY"] = os.environ.get( 'JWT_SECRET_KEY' ) #Esta app es la de la linea 17. JWT_SECRET_KEY es una variable de entorno que se guarda en el .env file, para leerla utilizo jwt = JWTManager(app) # Handle/serialize errors like a JSON object @app.errorhandler( APIException ) #Ayuda a que los errores se vean mas bonitos en forma de JSON (linea 25-27) def handle_invalid_usage(error): return jsonify(error.to_dict()), error.status_code
#!/usr/bin/env python # -*- coding:utf-8 -*- from app import app from database import db from models import Note, Author from admin import setup_admin from rest import setup_api # Auth and Admin stuff auth, admin = setup_admin() api = setup_api(auth) def setup_tables(): auth.User.create_table(fail_silently=True) Note.create_table(fail_silently=True) Author.create_table(fail_silently=True) if __name__ == '__main__': setup_tables() import views import feed app.run(host="0.0.0.0", port=8011)
# load our blueprints: app.register_blueprint(idp_component) # Setup Flask-Security lm = LoginManager(app) lm.login_view = 'idp.login' @lm.user_loader def load_user(user_id): """User loader callback for Flask-Login.""" return User.query.get(int(user_id)) db.init_app(app) admin = setup_admin(app, db) @app.before_first_request def initialize_self(): load_all_metadata() # Create a user to test with def create_base_data(u): with app.app_context(): db.drop_all() db.create_all() r = Role(name='admin', description='Superuser') u.roles.append(r)
app.config['WTF_CSRF_ENABLED'] = True # load our blueprints: app.register_blueprint(idp_component) # Setup Flask-Security lm = LoginManager(app) lm.login_view = 'idp.login' @lm.user_loader def load_user(user_id): """User loader callback for Flask-Login.""" return User.query.get(int(user_id)) db.init_app(app) admin = setup_admin(app, db) @app.before_first_request def initialize_self(): load_all_metadata() # Create a user to test with def create_base_data(u): with app.app_context(): db.drop_all() db.create_all() r = Role(name='admin', description='Superuser') u.roles.append(r) db.session.add(r)
#!/usr/bin/env python3 # -*- coding:utf-8 -*- from app import app from database import db from models import * from admin import setup_admin from rest import setup_api auth, admin = setup_admin() api = setup_api(auth) def setup_tables(): auth.User.create_table(fail_silently=True) Photo.create_table(fail_silently=True) global admin admin = auth.User(username='******', email='*****@*****.**', admin=True, active=True) admin.set_password('admin') admin.save() if __name__ == "__main__": setup_tables() import views print(app.url_map) app.run()