def create_app(): app = Flask(__name__) app.config.from_object(conf) with Path(__file__).parent.parent as root_dir: database_file = "sqlite:///{}".format( os.path.join(root_dir, 'db.sqlite')) print('<DB FILE : {}>'.format(database_file)) app.config["SQLALCHEMY_DATABASE_URI"] = database_file db.init_app(app) migrate.init_app(app, db) app.register_blueprint(main_bp, url_prefix="/") admin = Admin(app, name=app.config["APP_NAME"], template_mode='bootstrap3') from app.models import TerritoryUnit, PositionType, Person, Recipient, RecipientAdmin, PersonAdmin, ContractType, \ TeamsList admin.add_link(MenuLink(name='Site publique', category='', url='/')) admin.add_view(PersonAdmin(Person, db.session, name='Personnes déclarées')) admin.add_view(ModelView(TerritoryUnit, db.session, name='Délégations')) admin.add_view(ModelView(ContractType, db.session, name='Contrats')) admin.add_view(ModelView(PositionType, db.session, name='Postes')) admin.add_view(ModelView(TeamsList, db.session, name='Listes teams')) admin.add_view(RecipientAdmin(Recipient, db.session, name='Destinataires')) with app.app_context(): db.create_all() return app
def configure_admin(app): admin = Admin(index_view=IndexAdminView(endpoint='admin')) admin.init_app(app) admin.add_link(MenuLink(name='Logout', url='/user/logout')) admin.add_view(UserAdminView(User, sqldb.session, endpoint='user-admin')) admin.add_view(RoleAdminView(Role, sqldb.session, endpoint="role-admin")) return app
def administration_setup(app): """ Hack to use the backend administration. """ administration = Admin(name="Victims Admin", index_view=SafeAdminIndexView()) administration.init_app(app) # Application administration administration.add_view(CacheAdminView(name='Cache', endpoint='cache')) # Database management administration.add_view( AccountView(Account, name='Accounts', endpoint='accounts', category='Database')) administration.add_view( HashView(Hash, name='Hashes', endpoint='hashes', category='Database')) administration.add_view( SubmissionView(Submission, name='Submissions', endpoint='submissions', category='Database')) # File Management administration.add_view( FileView(app.config['UPLOAD_FOLDER'], '/uploads/', endpoint='uploads', name='User Uploads', category='Files')) administration.add_view( FileView(app.config['DOWNLOAD_FOLDER'], '/downloads/', endpoint='downloads', name='Charon Downloads', category='Files')) # Add links administration.add_link(MenuLink(name='Front End', endpoint='ui.index')) administration.add_link( MenuLink(name='Logout', endpoint='auth.logout_user')) return administration
def init_admin(app): admin = Admin(app, name='Redash Admin', template_mode='bootstrap3') admin.add_view(QueryModelView(models.Query, models.db.session)) admin.add_view(QueryResultModelView(models.QueryResult, models.db.session)) admin.add_view(DashboardModelView(models.Dashboard, models.db.session)) logout_link = MenuLink('Logout', '/logout', 'logout') for m in (models.Visualization, models.Widget, models.Event, models.Organization): admin.add_view(BaseModelView(m, models.db.session)) admin.add_link(logout_link)
def init_app(app): # Flask-DebugToolbar debug_toolbar.init_app(app) # Celery cel.init_app(app) # CSRF protection csrf.init_app(app) # SQLAlchemy db.init_app(app) # User user_manager.init_app(app, db, User) user_manager.email_manager = CustomEmailManager(app) # Flask-Gravatar gravatar.init_app(app) # Flask-Migrate migrate.init_app( app=app, db=db, directory=str(Path(__file__).resolve().parent / "migrations"), ) # Reverse proxy should used HTTPS if app.config["USE_REVERSE_PROXY"]: app.config["PREFERRED_URL_SCHEME"] = "https" app.wsgi_app = ProxyFix(app.wsgi_app, x_proto=1, x_host=1) # API Ratelimit limiter.init_app(app) # Flask-Admin admin = Admin( name="OpenCVE Admin", template_mode="bootstrap3", index_view=HomeView() ) admin.init_app(app) with warnings.catch_warnings(): warnings.filterwarnings("ignore", "Fields missing from ruleset") admin.add_view(UserModelView(User, db.session)) admin.add_view(CveModelView(Cve, db.session)) admin.add_view(EventModelView(Event, db.session)) admin.add_view(VendorModelView(Vendor, db.session)) admin.add_view(ProductModelView(Product, db.session)) admin.add_link(MenuLink(name="Tasks", url="/admin/tasks"))
def init_admin(app, db): login_manager = flask_login.LoginManager() login_manager.init_app(app) session = MODELS_GLOBAL_CONTEXT['session'] # ~ when defining this user_loader, we need an already initialized login_manager # ~ and an active db session @login_manager.user_loader def load_user(user_id): # pylint: disable=unused-variable return session.query(User).get(user_id) index_view_ = TrackerAdminResources(url='/') # pylint: disable=undefined-variable admin_ = Admin(app, name='FlaskTracker', template_mode='bootstrap3', index_view=index_view_) # ~ we need an already initialized app (to access the app.config), when defining the ModelView classes globals().update(define_view_classes(app)) admin_.add_view(TaskView(Task, db.session)) # pylint: disable=undefined-variable admin_.add_view(ProjectView(Project, db.session)) # pylint: disable=undefined-variable admin_.add_view(MilestoneView(Milestone, db.session)) # pylint: disable=undefined-variable admin_.add_view(OrderView(Order, db.session)) # pylint: disable=undefined-variable admin_.add_view(AttachmentView(Attachment, db.session)) # pylint: disable=undefined-variable admin_.add_view(ClaimView(Claim, db.session)) # pylint: disable=undefined-variable admin_.add_view(TrackerModelView(Customer, db.session, category="admin")) # pylint: disable=undefined-variable admin_.add_view(HistoryView(History, db.session, category="admin")) # pylint: disable=undefined-variable admin_.add_view(UserView(User, db.session, category="admin")) # pylint: disable=undefined-variable admin_.add_view(WorkTimeView(WorkTime, db.session, category="admin")) # pylint: disable=undefined-variable admin_.add_link(MenuLink(name='Wiki', url='/wiki/')) @app.route('/attachment/<path:filename>') def attachment(filename): # pylint: disable=unused-variable return send_from_directory(app.config['ATTACHMENT_PATH'], filename) return admin_
def create_app(config_class=Config): app = Flask(__name__) app.config.from_object(Config) db.init_app(app) bcrypt.init_app(app) login_manager.init_app(app) admin.init_app(app) mail.init_app(app) babel.init_app(app) from okiedokie.users.routes import users from okiedokie.meetings.routes import meetings from okiedokie.main.routes import main from okiedokie.ya_payments.routes import ya_payments app.register_blueprint(users) app.register_blueprint(meetings) app.register_blueprint(main) app.register_blueprint(ya_payments) admin.add_link(MenuLink(name='Back Home', url='/', category='Links')) return app
def init_app(app): # Flask-Admin admin.init_app(app) admin.add_view(UserModelView(User, db.session)) admin.add_view(CveModelView(Cve, db.session)) admin.add_view(EventModelView(Event, db.session)) admin.add_view(VendorModelView(Vendor, db.session)) admin.add_view(ProductModelView(Product, db.session)) admin.add_link(MenuLink(name="Tasks", url="/admin/tasks")) # Flask-DebugToolbar debug_toolbar.init_app(app) # Celery cel.init_app(app) # CSRF protection csrf.init_app(app) # SQLAlchemy db.init_app(app) # User user_manager.init_app(app, db, User) user_manager.email_manager = CustomEmailManager(app) # Flask-Gravatar gravatar.init_app(app) # Flask-Migrate migrate.init_app( app=app, db=db, directory=str(Path(__file__).resolve().parent / "migrations"), ) # Reverse proxy should used HTTPS if app.config["USE_REVERSE_PROXY"]: app.config["PREFERRED_URL_SCHEME"] = "https" app.wsgi_app = ProxyFix(app.wsgi_app, x_proto=1, x_host=1)
def create_app(config_class=Config): app = Flask(__name__) app.config.from_object(config_class) register_extensions(app) register_blueprints(app) user_datastore = SQLAlchemyUserDatastore(db, models.User, models.Role) security = Security(app, user_datastore) admin.add_view(models.AdminVenueView(models.Venue, db.session, 'Venues')) admin.add_view(models.AdminRoleView(models.Role, db.session, 'Roles')) admin.add_view(models.AdminUserView(models.User, db.session, 'Users')) admin.add_link(MenuLink(name='Reel Miami', url=('/'))) @security.context_processor def security_context_processor(): return dict(admin_base_template=admin.base_template, admin_view=admin.index_view, h=admin_helpers, get_url=url_for) return app
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 db Mongo db.init_app(app) # Setup Flask-Mail mail.init_app(app) # Setup WTForms CSRFProtect csrf_protect.init_app(app) # Register blueprints from app.views.public_views import public_blueprint app.register_blueprint(public_blueprint) from app.views.members_views import members_blueprint app.register_blueprint(members_blueprint) # Setup an error-logger to send emails to app.config.ADMINS init_email_error_handler(app) # Setup Flask-secure from .models.user_models import User, Role app.user_datastore = MongoEngineUserDatastore(db, User, Role) security.init_app(app, app.user_datastore) # datastore.create_user(email='*****@*****.**', password='******') Bootstrap(app) # Initialize flask_bootstrap babel.init_app(app) # Initialize flask_babelex # 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 Flask-admin class AdminUserView(ModelView): can_create = False column_exclude_list = ('password') form_overrides = dict(password=HiddenField) admin = Admin(app, template_mode='bootstrap3') admin.add_view(AdminUserView(User)) admin.add_view(ModelView(Role)) path = op.join(op.dirname(__file__), 'static') admin.add_view(FileAdmin(path, '/static/', name='Files')) admin.add_link(MenuLink(name='Profile', endpoint='members.member_page')) admin.add_link(MenuLink(name='Logout', endpoint='security.logout')) return app
'children', ] column_filters = [ 'id', 'name', 'parent', ] # override the 'render' method to pass your own parameters to the template def render(self, template, **kwargs): return super(TreeView, self).render(template, foo="bar", **kwargs) # Create admin admin = admin.Admin(app, name='Example: SQLAlchemy', template_mode='bootstrap4') # Add views admin.add_view(UserAdmin(User, db.session)) admin.add_view(sqla.ModelView(Tag, db.session)) # The "Post" model gets added in the overriddent __init__(self, Post, session) admin.add_view(PostAdmin(db.session)) admin.add_view(TreeView(Tree, db.session, category="Other")) admin.add_sub_category(name="Links", parent_name="Other") admin.add_link(MenuLink(name='Back Home', url='/', category='Links')) admin.add_link( MenuLink(name='External link', url='http://www.example.com/', category='Links'))
class TreeView(sqla.ModelView): form_excluded_columns = ['children', ] # Create admin admin = admin.Admin(app, name='Example: SQLAlchemy', template_mode='bootstrap3') # Add views admin.add_view(UserAdmin(User, db.session)) admin.add_view(sqla.ModelView(Tag, db.session)) admin.add_view(PostAdmin(db.session)) admin.add_view(TreeView(Tree, db.session, category="Other")) admin.add_sub_category(name="Links", parent_name="Other") admin.add_link(MenuLink(name='Back Home', url='/', category='Links')) admin.add_link(MenuLink(name='Google', url='http://www.google.com/', category='Links')) admin.add_link(MenuLink(name='Mozilla', url='http://mozilla.org/', category='Links')) def build_sample_db(): """ Populate a small db with some example entries. """ import random import datetime db.drop_all() db.create_all()
from flask_admin.base import MenuLink test_link = \ MenuLink( category='Plugins', name='Test Menu Link', url='https://airflow.apache.org/' ) MENU_LINKS = [ test_link, ]
# Customized Role model for SQL-Admin class UserAdmin(ModelView): def is_accessible(self): return current_user.has_role("Admin") admin = Admin(app, name=app.config["LINE_NAME"] + " Admin", template_mode="bootstrap3", index_view=MyAdminIndexView(), url="/") admin.add_view(UserAdmin(User, db_session)) admin.add_view(UserAdmin(Role, db_session)) admin.add_link(MenuLink(name='Tabule', category='Odkazy', endpoint='index')) #flask_mail mail = Mail(app) # views @app.route("/") def index(): return render_template("index.html", line_name=current_app.config["LINE_NAME"], name_space=current_app.config["NAME_SPACE"]) @app.route("/control") @login_required
from airflow.plugins_manager import AirflowPlugin from flask_admin.base import MenuLink grafana = MenuLink(category='Grafana', name='Dashboard', url='http://0.0.0.0:3000') # Defining the plugin class class GrafanaLinksPlugin(AirflowPlugin): name = "GrafanaLinks" operators = [] flask_blueprints = [] hooks = [] executors = [] admin_views = [] menu_links = [grafana]
""" return is_admin(current_user) column_labels = dict(displayname='Display Name', ) form_excluded_columns = ('posts', 'comments') column_searchable_list = ('username', 'email', 'displayname') ADMIN.add_view(UserAdmin(User, db.session, name='Users')) class RoleAdmin(sqla.ModelView): """ Defines the Comment administration page """ def is_accessible(self): """ Function to check if user has access to certain page :return: True if accessible, False if not """ return is_admin(current_user) column_labels = dict(name='Name', ) form_excluded_columns = ('users', ) column_searchable_list = ('name', 'description') ADMIN.add_view(RoleAdmin(Role, db.session, name='Roles')) ADMIN.add_link(MenuLink(name='Back', url='/'))
return self.render("test_plugin/test.html", content="Hello galaxy!") v = TestView(category="Test Plugin", name="Test View") # Creating a flask blueprint to intergrate the templates and static folder bp = Blueprint( "test_plugin", __name__, template_folder= 'templates', # registers airflow/plugins/templates as a Jinja template folder static_folder='static', static_url_path='/static/test_plugin') ml = MenuLink(category='Test Plugin', name='Test Menu Link', url='https://airflow.incubator.apache.org/') # Defining the plugin class class AirflowTestPlugin(AirflowPlugin): name = "test_plugin" operators = [PluginOperator] sensors = [PluginSensorOperator] hooks = [PluginHook] executors = [PluginExecutor] macros = [plugin_macro] admin_views = [v] flask_blueprints = [bp] menu_links = [ml]
return jsonify({'hello': 'FROM THE REST API'}) v = Demultiplex(category="Demultiplex", name="Demultiplex") # Creating a flask blueprint to integrate the templates and static folder # When trying to add css/js refs - use this # <link rel="stylesheet" href="{{ url_for('demultiplex_plugin.static', filename='styles.css') }}" type="text/css"> bp = Blueprint("demultiplex_plugin", __name__, template_folder='templates', static_folder='static', static_url_path='/static/test_plugin') ml = MenuLink(category='Demultiplex', name='View Previous Runs', url='/admin/airflow/tree?dag_id=sequencer_automation') class AirflowDemultiplexPlugin(AirflowPlugin): name = "demultiplex_plugin" operators = [PluginOperator] sensors = [PluginSensorOperator] hooks = [PluginHook] executors = [PluginExecutor] macros = [plugin_macro] admin_views = [v] flask_blueprints = [bp] menu_links = [ml]
admin.add_view( UserModelView(User, db.session, category='Account', menu_icon_type='glyph', menu_icon_value='glyphicon-user')) admin.add_view( PostModelView(Post, db.session, category='Account', menu_icon_type='glyph', menu_icon_value='glyphicon-edit')) admin_add_category(admin, 'Other') admin.add_sub_category(name='Links', parent_name='Other') admin.add_link(MenuLink(name='Back Home', url='/admin', category='Other')) admin.add_link( MenuLink(name='Flask-Demos', url='https://github.com/AngelLiang/Flask-Demos', category='Links')) admin.add_link( MenuLink(name='Baidu', url='http://www.baidu.com/', category='Links')) # 添加到banav的右上角 admin.add_links(MenuLink(name='Logout', url='/')) def initdata(user_count=50, post_count=100): import random from faker import Faker fake = Faker('zh_CN')
# Creating a flask admin BaseView class TestView(BaseView): @expose('/') def test(self): # in this example, put your test_plugin/test.html template at airflow/plugins/templates/test_plugin/test.html return self.render("test_plugin/test.html", content="Hello galaxy!") v = TestView(category="Test Plugin", name="Test View") # Creating a flask blueprint to intergrate the templates and static folder bp = Blueprint( "test_plugin", __name__, template_folder='templates', # registers airflow/plugins/templates as a Jinja template folder static_folder='static', static_url_path='/static/test_plugin') ml = MenuLink( category='Test Plugin', name='Test Menu Link', url='http://pythonhosted.org/airflow/') # Defining the plugin class class AirflowTestPlugin(AirflowPlugin): name = "test_plugin" operators = [PluginOperator] hooks = [PluginHook] executors = [PluginExecutor] macros = [plugin_macro] admin_views = [v] flask_blueprints = [bp] menu_links = [ml]
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='/'))
v = TestView(category="Rule Plugin", name="Rules View") v2 = NetworkView(category="Rule Plugin", name="Network") v3 = ServiceView(category="Rule Plugin", name="Service") v4 = PrevStateView(category="Rule Plugin", name="Previous States") v5 = RedisKeyView(category="Rule Plugin", name="KPI Data") # Creating a flask blueprint to intergrate the templates and static folder bp = Blueprint( "rule_plugin", __name__, template_folder= 'templates', # registers airflow/plugins/templates as a Jinja template folder static_folder='static', static_url_path='/static/rules') ml = MenuLink(category='W1', name='UAT', url='http://10.133.12.163') ml2 = MenuLink(category='W1', name='Production', url='http://121.244.255.107') # Defining the plugin class class AirflowTestPlugin(AirflowPlugin): name = "rule_plugin" operators = [PluginOperator] hooks = [PluginHook] executors = [PluginExecutor] macros = [plugin_macro] admin_views = [v, v2, v3, v4, v5] flask_blueprints = [bp] menu_links = [ml, ml2]
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 db Mongo db.init_app(app) # Setup Flask-Mail #mail.init_app(app) # Setup WTForms CSRFProtect csrf_protect.init_app(app) # Register blueprints from app.views.public_views import public_blueprint app.register_blueprint(public_blueprint) from app.views.success import members_blueprint app.register_blueprint(members_blueprint) from app.views.admin_views import admin_blueprint app.register_blueprint(admin_blueprint, url_prefix='/admin') from app.views.mod_views import mod_blueprint app.register_blueprint(mod_blueprint, url_prefix='/mod') from app.views.biz_views import biz_blueprint app.register_blueprint(biz_blueprint, url_prefix='/biz') # Setup an error-logger to send emails to app.config.ADMINS #init_email_error_handler(app) # Setup Flask-secure from .models.user_models import Role, User app.user_datastore = MongoEngineUserDatastore(db, User, Role) security.init_app(app, app.user_datastore, register_form=registerForm) # datastore.create_user(email='*****@*****.**', password='******') babel.init_app(app) # Initialize flask_babelex # Setup Flask-admin class AdminUserView(ModelView): can_create = False column_exclude_list = ('password') column_editable_list = ['active'] def is_accessible(self): return current_user.has_role('admin') adminDash = Admin( app, name='admin', template_mode='bootstrap4', url="/admin", endpoint='admin' ) #, index_view=adminView(url='/admin', endpoint='admin')) adminDash.add_view(AdminUserView(User)) adminDash.add_view(ModelView(Role)) path = op.join(op.dirname(__file__), './') adminDash.add_view(FileAdmin(path, '/', name='Files')) adminDash.add_link(MenuLink(name='Profile', endpoint='members.member_page')) adminDash.add_link(MenuLink(name='Logout', endpoint='security.logout')) return app
from flask_admin.base import MenuLink ElasticsearchLink = MenuLink(category='Elasticsearch Plugin', name='More Info', url='https://marclamberti.com')
from models import * # Import admin classes from admin from admin import * # Create admin panel admin = Admin(app, 'Na Rogah', url='/', index_view=HomeAdminView(name='Home')) admin.add_view( TimetableAdminView(Timetable, db.session, name='Расписание работы')) admin.add_view(TablesAdminView(Tables, db.session, name='Столы')) admin.add_view(CategoryAdminView(Category, db.session, name='Категории')) admin.add_view(MenuAdminView(Menu, db.session, name='Меню')) admin.add_view(SubMenuAdminView(SubMenu, db.session, name='Подменю')) admin.add_view(UsersAdminView(Users, db.session, name='Пользователи')) admin.add_view(BookingAdminView(Booking, db.session, name='Бронирование')) #logout link admin.add_link(MenuLink(name='Выйти', category='', url="/logout")) # FLASK-SECURITY user_datastore = SQLAlchemyUserDatastore(db, Users, Role) security = Security(app, user_datastore) # For sending emails with Flask-Mail mail = Mail(app) # import function for delete old booking records from db from background_invoker import delete_old_booking, delete_old_access_codes # BackgroundScheduler scheduler = BackgroundScheduler() scheduler.add_job(func=delete_old_booking, trigger="interval", seconds=30) scheduler.add_job(func=delete_old_access_codes, trigger="interval", seconds=30) scheduler.start()
class MyModelView(ModelView): column_display_pk = True column_hide_backrefs = True # Admin views admin = Admin(app, name='Art Gallery', template_mode='bootstrap3') # admin = Admin(app, name='art_gallery', base_template='base.html') admin.add_view(MyModelView(AdminUser, db.session)) admin.add_view(MyModelView(User, db.session)) admin.add_view(MyModelView(Feedback, db.session)) admin.add_view(MyModelView(Paintings, db.session)) admin.add_view(MyModelView(Artist, db.session)) # Add home link by url admin.add_link(MenuLink(name='Back', url='/')) @app.route('/testdb') def testdb(): user = Paintings.query.with_entities(Paintings.name, Paintings.painting_photo).filter_by(artist_id=1) print dict(user.all()) for u in user.all(): print u # return render_template("login.html",title="login") return "done!" @app.route('/', methods=['GET', 'POST']) def index(): title = 'Home' form = FeedbackForm()
"category": "Search", "category_icon": "fa-th", "href": "https://www.google.com" } # Creating a flask blueprint to intergrate the templates and static folder bp = Blueprint( "test_plugin", __name__, template_folder= 'templates', # registers airflow/plugins/templates as a Jinja template folder static_folder='static', static_url_path='/static/test_plugin') ml = MenuLink(category='Test Plugin', name="Test Menu Link", url="https://airflow.incubator.apache.org/") # Defining the plugin class class AirflowTestPlugin(AirflowPlugin): name = "test_plugin" operators = [PluginOperator] sensors = [PluginSensorOperator] hooks = [PluginHook] executors = [PluginExecutor] macros = [plugin_macro] admin_views = [v] flask_blueprints = [bp] menu_links = [ml] appbuilder_views = [v_appbuilder_package]
return MyForm def update_model(self, form, model): print('Currently not supported') return True admin_view = DataView(category='OpenAQ', name='DataView') blue_print2 = Blueprint('dataview_plugin', __name__, template_folder='templates', static_folder='static', static_url_path='/static/dataview_plugin') ml = MenuLink(category='OpenAQ', name='S3 Bucket', url='https://openaq-fetches.s3.amazonaws.com/index.html') altview = Tes(model='Stations', name='Stations', endpoint='test11', category='OpenAQ') class AirflowDataView(AirflowPlugin): name = 'dataview_plugin' admin_views = [admin_view, altview] flask_blueprints = [blue_print2] menu_links = [ml]
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)
column_labels = dict( product_type_code='Code', product_type_name='Name', product_type_description='Description') def on_model_change(self, form, Product, is_created): if is_created: Product.created_by = session['profile']['email'] else: Product.modified_by = session['profile']['email'] """ Admin app provisioning. - Instantiates Admin globally, for wsgi container - Order in which views and links are added corresponds to main nav menu """ admin = Admin( app, name='OAO Account Administration', template_mode='bootstrap3') admin.add_view(ClientAdmin(Client, db.session)) # custom links for clients, to include active_client_flag filter admin.add_link( MenuLink(name='Active', category='Client', url='/admin/client/?flt0_0=1')) admin.add_link(MenuLink(name='All', category='Client', url='/admin/client')) admin.add_view(EmployeeAdmin(Employee, db.session)) admin.add_view(ProductAdmin(Product, db.session)) admin.add_link(MenuLink(name='Logout', url='/logout')) if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=5000)