def create_admin_views(): global views_already_created if views_already_created is False: admin.add_link( MenuLink(name='Public Website', category='', url=url_for('index'))) admin.add_views(adminView(Post, db.session)) admin.add_views(adminView(Messages, db.session)) admin.add_views(adminView(User, db.session)) views_already_created = True
from flask import render_template, flash, redirect, session, url_for, request, \ g, Markup, jsonify, json from flask_login import login_user, logout_user, current_user, login_required from flask_admin.base import MenuLink from datetime import datetime from dateutil.parser import parse from app import app, db, lm, admin #, hashids from .models import * from .forms import * from .admin import AdminModelView admin.add_link(MenuLink(name='Back to Visitor Health Log', url='/')) admin.add_view(AdminModelView(User, db.session)) admin.add_view(AdminModelView(Visitor, db.session)) def redirect_dest(fallback): return request.args.get('next') or fallback @lm.user_loader def load_user(id): return User.query.get(int(id)) @app.before_request def before_request(): g.user = current_user if g.user.is_authenticated: g.user.last_seen = datetime.now() db.session.add(g.user)
def is_accessible(self): return current_user.is_authenticated def inaccessible_callback(self, name, **kwargs): return redirect(url_for('main.index')) class MyAdminView(ModelView): def is_accessible(self): return current_user.is_authenticated def inaccessible_callback(self, name, **kwargs): return redirect(url_for('main.index')) class LogoutMenuLink(MenuLink): def is_accessible(self): return current_user.is_authenticated class AppMenuLink(MenuLink): def is_accessible(self): return current_user.is_authenticated admin.add_view(MyUserView(User, db.session)) admin.add_view(MyAdminView(Note, db.session)) admin.add_view(MyAdminView(Todo, db.session)) admin.add_link(LogoutMenuLink(name='App', category='', url="/")) admin.add_link(LogoutMenuLink(name='Logout', category='', url="/logout"))
return redirect(url_for('main.index')) can_export = True export_types = ['csv'] static_folder = 'static' class UserAdmin(AdminModelView): column_list = ['username', 'email', 'role'] form_columns = ['username', 'email', 'role'] column_editable_list = [ 'email', 'role', ] column_searchable_list = [ 'username', 'email', 'role.name', ] admin.add_view(UserAdmin(User, db.session)) admin.add_view(AdminModelView(Book, db.session, category='Books')) admin.add_view(AdminModelView(Author, db.session, category='Books')) admin.add_view(AdminModelView(Category, db.session, category='Books')) admin.add_view(AdminModelView(Identifier, db.session, category='Books')) admin.add_view(AdminModelView(Link, db.session, category='Books')) admin.add_view(AdminModelView(Item, db.session, category='BookItems')) admin.add_view(AdminModelView(History, db.session, category='BookItems')) admin.add_link(MenuLink(name='Exit Admin', url='/'))
from app import db, admin from app.user.roles import admin_permission from app.models import User, Project, MonitoringStation, EquipmentType, Equipment, ClusterGroup, LabelType, Label, Language, CommonName, ProjectLabel, MLModel, ModelIteration, ModelLabel # Customized model view class class MyModelView(ModelView): def is_accessible(self): return admin_permission.can() class ClusterGroupView(MyModelView): form_excluded_columns = ('clusters') admin.add_link(MenuLink(name='Main Site', category='', url='/')) admin.add_view(MyModelView(User, db.session)) admin.add_view(MyModelView(Project, db.session)) admin.add_view(MyModelView(MonitoringStation, db.session)) admin.add_view(MyModelView(EquipmentType, db.session)) admin.add_view(MyModelView(Equipment, db.session)) admin.add_view(ClusterGroupView(ClusterGroup, db.session)) admin.add_view(MyModelView(LabelType, db.session)) admin.add_view(MyModelView(Label, db.session)) admin.add_view(MyModelView(Language, db.session)) admin.add_view(MyModelView(CommonName, db.session)) admin.add_view(MyModelView(ProjectLabel, db.session)) admin.add_view(MyModelView(MLModel, db.session)) admin.add_view(MyModelView(ModelIteration, db.session)) admin.add_view(MyModelView(ModelLabel, db.session))
def init_extensions(app): # Start Flask-SQLAlchemy db.init_app(app) # Start Flask-Login login_manager.login_view = 'auth.login' login_manager.init_app(app) from app.models import User from app import admin # Start Flask-Admin admin.init_app(app) admin.add_view(AdminModelView(User, db.session)) admin.add_link(MainIndexLink(name='WizeTher Dashboard')) try: with app.app_context(): # Create database models db.create_all() # Create admin user on startup admin_email = app.config['ADMIN_EMAIL'] admin_name = app.config['ADMIN_NAME'] admin_pass = app.config['ADMIN_PASSWORD'] app.logger.info('Admin account: {} <----> {}'.format( admin_email, admin_pass)) admin = User.query.filter_by(email=admin_email).first() if admin is None: passw = generate_password_hash(admin_pass, method='sha256') new_user = User( email=admin_email, name=admin_name, #password=admin_pass, role='admin') new_user.set_password(admin_pass) db.session.add(new_user) db.session.commit() app.logger.info('Added admin user to dabatase') else: # Checking if password has been changed admin_hash = generate_password_hash(admin_pass, method='sha256') if not check_password_hash(admin_hash, admin.password): # Updating password on database admin.password = admin_hash db.session.add(admin) db.session.commit() #app.logger.info('Updated admin password') app.logger.info('Database working') except Exception as e: app.logger.error('Exception Found: ' + str(e)) app.logger.error( 'Database not found. Please read README.md to create the db.') app.logger.info('Done. Flask extensions started.')
#!/home/yayo/virtual_enviroment/bin/python import os from app import create_app, db, admin, models from app.models import User, Role from flask.ext.script import Manager, Shell from flask.ext.admin.menu import MenuLink app = create_app(os.getenv('FLASK_CONFIG') or 'default') manager = Manager(app) admin.add_view(models.UserView(models.User, db.session)) admin.add_link(MenuLink(name='Back', category='', url="/home")) def make_shell_context(): return dict(app=app, db=db, User=User, Role=Role) manager.add_command("shell", Shell(make_context=make_shell_context)) if __name__ == '__main__': manager.run()
#!/home/yayo/virtual_enviroment/bin/python import os from app import create_app, db, admin, models from app.models import User, Role from flask.ext.script import Manager, Shell from flask.ext.admin.menu import MenuLink app = create_app(os.getenv("FLASK_CONFIG") or "default") manager = Manager(app) admin.add_view(models.UserView(models.User, db.session)) admin.add_link(MenuLink(name="Back", category="", url="/home")) def make_shell_context(): return dict(app=app, db=db, User=User, Role=Role) manager.add_command("shell", Shell(make_context=make_shell_context)) if __name__ == "__main__": manager.run()
def __init__(self, session, **kwargs): # You can pass name and other parameters if you want to super(SettingsView, self).__init__(Settings, session, **kwargs) def is_accessible(self): if g.user.is_authenticated(): return g.user.role #ROLE_ADMIN == 1, user = 0 else: #anonymous user return 0 class EmailView(ModelView): def __init__(self, session, **kwargs): # You can pass name and other parameters if you want to super(EmailView, self).__init__(Email, session, **kwargs) def is_accessible(self): if g.user.is_authenticated(): return g.user.role #ROLE_ADMIN == 1, user = 0 else: #anonymous user return 0 #add flask admin views admin.add_view(UserView(db.session)) admin.add_view(ZoneView(db.session)) admin.add_view(ValidUsersView(db.session)) admin.add_view(SettingsView(db.session)) admin.add_view(EmailView(db.session)) admin.add_link(MenuLink(name='Clear History', url='/clearhistory')) admin.add_link(MenuLink(name='Exit Admin', url='/'))
def create_app(): app = Flask(__name__) # Load app config if app.config['ENV'] == 'production': # Create logger logger = logging.getLogger('flask.errors') logger.setLevel(logging.DEBUG) # Create console handler and configure it consoleHandler = logging.StreamHandler() consoleHandler.setLevel(logging.DEBUG) logFormat = '%(asctime)s - %(name)s - %(levelname)s - %(message)s' consoleHandler.setFormatter(logging.Formatter(logFormat)) # Add our custom handler to the logger logger.addHandler(consoleHandler) # Tell the app to use logger app.logger.handlers = logger.handlers app.logger.setLevel(logger.level) # Server side minification app.logger.info('Minifying') minify(app=app, html=True, js=False, cssless=True) app.logger.info('Starting with ProductionConfig') app.config.from_object(ProductionConfig) elif app.config['ENV'] == 'testing': app.logger.info("Starting with TestingConfig") app.config.from_object(TestingConfig) else: app.logger.info('Starting with DevelopmentConfig') app.config.from_object(DevelopmentConfig) # Connect to database app.logger.info('Using database connection:' + app.config['SQLALCHEMY_DATABASE_URI']) app.logger.info('Using redis connection:' + app.config['RQ_REDIS_URL']) app.url_map.strict_slashes = True # Gotify push notifications if app.config['GOTIFY_URL'] is not None: app.logger.info('Using Gotify url: {}'.format( app.config['GOTIFY_URL'])) # # Custom flask cli commands # app.cli.add_command(run_worker) app.cli.add_command(run_scheduler) # # Set up Flask extensions # # Init Flask-DebugToolbar toolbar.init_app(app) # Init Flask-RQ2 rq.init_app(app) # Init Flask-SQLAlchemy db.init_app(app) # Init Flask-Migrate migrate.init_app(app, db) # Init Flask-Login login_manager.login_view = 'auth.login' login_manager.init_app(app) login_manager.refresh_view = 'auth.login' login_manager.needs_refresh_message = ( u"Session timedout, please re-login") login_manager.needs_refresh_message_category = "info" from app.models import User from app import admin admin.init_app(app) admin.add_view(AdminModelView(User, db.session)) #admin.add_view(FileAdmin('./path/', '/files/', name="File browser")) admin.add_link(MainIndexLink(name='Flask Dashboard')) try: with app.app_context(): # Create database models #db.create_all() # Create admin user on startup admin_email = app.config['ADMIN_EMAIL'] admin_name = app.config['ADMIN_NAME'] admin_pass = app.config['ADMIN_PASSWORD'] admin = User.query.filter_by(email=admin_email).first() if admin.name is None: passw = generate_password_hash(admin_pass, method='sha256') new_user = User( email=admin_email, name=admin_name, #password=admin_pass, role='admin') new_user.set_password(admin_pass) db.session.add(new_user) db.session.commit() app.logger.info('Added admin user to dabatase') else: # Checking if password has been changed admin_hash = generate_password_hash(admin_pass, method='sha256') if not check_password_hash(admin_hash, admin.password): # Updating password on database admin.password = admin_hash db.session.add(admin) db.session.commit() #app.logger.info('Updated admin password') app.logger.info('Database working') except Exception as e: app.logger.error('Exception Found' + str(e)) app.logger.error( 'Database not found. Please read README.md to create the db.') app.logger.info('Done. Flask extensions started.') # Adding the views app from app.views.home import dashboard_bp from app.views.auth import auth_bp from app.views.api import api_bp app.register_blueprint(dashboard_bp) app.register_blueprint(auth_bp) app.register_blueprint(api_bp) # Inject global variables to all templates @app.context_processor def injectVariables(): return dict(user=current_user) # Set up global HTML handlers @app.errorhandler(500) def internal_server_error(error): return render_template('500.html'), 500 @app.errorhandler(404) def page_not_found(error): return render_template('404.html'), 404 # Auto logout session. Modify time in minutes @app.before_request def before_request(): session.permanent = True app.permanent_session_lifetime = timedelta(minutes=1440) return app
from bokeh.application.handlers import FunctionHandler from app import app, db, loginmanager, admin from bokeh.embed import autoload_server, server_document from bokeh.server.server import Server from .models import User, Diamond from .forms import LoginForm, AddRowForm, EditDiamondForm from .datawarehouse import connect_db, query_to_dict from .admin import AdminModelView from .pdlgd import modify_doc # add a view to manage users; can be accessed at /admin/user admin.add_view(AdminModelView(User, db.session)) # add a view to manage Redhshift table; can be accessed at /admin/diamond admin.add_view(AdminModelView(Diamond, db.session)) admin.add_link(MenuLink(name='Back To App', url='/pdlgd')) bkapp = Application(FunctionHandler(modify_doc)) @app.before_request def before_request(): """ Set global user to current user and opens a new database connection if there is none yet for the current application context. """ g.user = current_user if not hasattr(g, 'db'): g.db = connect_db() if g.user.is_authenticated: g.user.last_seen = datetime.now() @app.teardown_request
jobs.notification.send_mail.delay( [user.account.email], gettext('reset your password in ') + 'Maybe', html) return render_template('admin/user/reset_password.html', form=form) else: flash(gettext('sorry, no user found for that email address'), 'error') return render_template('admin/user/reset_password.html', form=form) @frontend.route('/admin/secret') @fresh_login_required def secret(): """ 保密 :return: """ if current_user.is_authenticated: print(current_user) return jsonify(success='OK') admin.add_link(MenuLink(name='Home', url='/admin')) admin.add_link( NotAuthenticatedMenuLink(name='Login', endpoint='frontend.login')) admin.add_link(AuthenticatedMenuLink(name='Logout', endpoint='frontend.logout')) admin.add_link( AuthenticatedMenuLink(name='Change Password', endpoint='frontend.change_password'))