def setup_app(app): """Register all administration views with the Flask application.""" app.config.setdefault("ADMIN_NAME", "Invenio") app.config.setdefault("ADMIN_UI_SKIN", "skin-blue") # Initialize app admin = Admin( name=app.config['ADMIN_NAME'], index_view=AdminIndexView( menu_icon_type='fa', menu_icon_value='fa-home'), base_template="admin_base.html", template_mode='bootstrap3' ) # TODO remove when 1.2.1 is released if not hasattr(admin, 'category_icon_classes'): admin.category_icon_classes = {} admin.init_app(app) # Create registry and run discovery app.extensions['registry']['admin'] = AdminDiscoveryRegistry( 'admin', app=app, with_setup=True, admin=admin )
def test_admin(db, app): """Test flask-admin interace.""" admin = Admin(app, name="AdminExt") # Register models in admin for adminview in (sip_adminview, sipfile_adminview, recordsip_adminview): assert 'model' in adminview assert 'modelview' in adminview admin_kwargs = dict(adminview) model = admin_kwargs.pop('model') modelview = admin_kwargs.pop('modelview') admin.add_view(modelview(model, db.session, **admin_kwargs)) # Check if generated admin menu contains the correct items menu_items = {str(item.name): item for item in admin.menu()} # PIDStore should be a category assert 'Records' in menu_items assert menu_items['Records'].is_category() assert isinstance(menu_items['Records'], menu.MenuCategory) # Items in PIDStore menu should be the modelviews submenu_items = {str(item.name): item for item in menu_items['Records'].get_children()} assert 'SIP' in submenu_items assert 'RecordSIP' in submenu_items assert 'SIPFile' in submenu_items assert isinstance(submenu_items['SIP'], menu.MenuView) assert isinstance(submenu_items['RecordSIP'], menu.MenuView) assert isinstance(submenu_items['SIPFile'], menu.MenuView)
def test_admin(app): """Test flask-admin interace.""" InvenioOAuthClient(app) assert isinstance(remote_account_adminview, dict) assert isinstance(remote_token_adminview, dict) assert 'model' in remote_account_adminview assert 'modelview' in remote_account_adminview assert 'model' in remote_token_adminview assert 'modelview' in remote_token_adminview admin = Admin(app, name='Test') user_model = remote_account_adminview.pop('model') user_view = remote_account_adminview.pop('modelview') admin.add_view(user_view(user_model, db.session, **remote_account_adminview)) with app.app_context(): # create user and save url for testing request_url = url_for('remoteaccount.index_view') with app.app_context(): with app.test_client() as client: res = client.get( request_url, follow_redirects=True ) assert res.status_code == 200 assert 'Extra Data' in str(res.get_data()) assert 'Tokens' in str(res.get_data())
def create_app(settings_override=None): """Return the PyGotham admin application. :param settings_override: a ``dict`` of settings to override. """ app = factory.create_app(__name__, __path__, settings_override) app.jinja_env.filters['rst'] = filters.rst_to_html # Because the admin is being wrapped inside an app, the url needs to # be overridden to use / instead of the default of /admin/. One of # the side effects of doing this is that the static assets won't # serve correctly without overriding static_url_path as well. admin = Admin( app, name='PyGotham', static_url_path='/admin', index_view=HomeView(endpoint='', url='/'), ) # Iterate through all the modules of the current package. For each # module, check the public API for any instances of types that can # be added to the Flask-Admin menu and register them. for _, name, _ in pkgutil.iter_modules(__path__): module = importlib.import_module('{}.{}'.format(__name__, name)) for attr in dir(module): view = getattr(module, attr) if isinstance(view, ModelView): admin.add_view(view) elif isinstance(view, MenuLink): admin.add_link(view) return app
def run_admin(host, port, db, password, listen): conn = redis.Redis(host, int(port or 6379), int(db or 0), password) tiger = TaskTiger(setup_structlog=True, connection=conn) app = Flask(__name__) admin = Admin(app, url='/') admin.add_view(TaskTigerView(tiger, name='TaskTiger', endpoint='tasktiger')) app.run(debug=True, port=int(listen or 5000))
def test_admin(): """Test flask-admin interace.""" app = Flask('testapp') FlaskCLI(app) InvenioDB(app) InvenioPIDStore(app) admin = Admin(app, name="AdminExt") pid_kwargs = dict(pid_adminview) assert 'model' in pid_adminview assert 'modelview' in pid_adminview # Register both models in admin pid_model = pid_kwargs.pop('model') pid_mv = pid_kwargs.pop('modelview') admin.add_view(pid_mv(pid_model, db.session, **pid_kwargs)) # Check if generated admin menu contains the correct items menu_items = {str(item.name): item for item in admin.menu()} # PIDStore should be a category assert 'Records' in menu_items assert menu_items['Records'].is_category() assert isinstance(menu_items['Records'], menu.MenuCategory) # Items in PIDStore menu should be the modelviews submenu_items = {str(item.name): item for item in menu_items['Records'].get_children()} assert 'Persistent Identifier' in submenu_items assert isinstance(submenu_items['Persistent Identifier'], menu.MenuView)
def test_admin(app): """Test flask-admin interace.""" admin = Admin(app, name="Test") assert 'model' in record_adminview assert 'modelview' in record_adminview # Register both models in admin model = record_adminview.pop('model') view = record_adminview.pop('modelview') admin.add_view(view(model, db.session, **record_adminview)) # Check if generated admin menu contains the correct items menu_items = {str(item.name): item for item in admin.menu()} assert 'Records' in menu_items assert menu_items['Records'].is_category() submenu_items = { str(item.name): item for item in menu_items['Records'].get_children()} assert 'Record Metadata' in submenu_items assert isinstance(submenu_items['Record Metadata'], menu.MenuView) # Create a test record. with app.app_context(): rec_uuid = str(uuid.uuid4()) Record.create({'title': 'test'}, id_=rec_uuid) db.session.commit() with app.test_request_context(): index_view_url = url_for('recordmetadata.index_view') delete_view_url = url_for('recordmetadata.delete_view') detail_view_url = url_for( 'recordmetadata.details_view', id=rec_uuid) with app.test_client() as client: # List index view and check record is there. res = client.get(index_view_url) assert res.status_code == 200 # Fake a problem with SQLAlchemy. with patch('invenio_records.admin.Record') as db_mock: db_mock.side_effect = SQLAlchemyError() res = client.post( delete_view_url, data={'id': rec_uuid}, follow_redirects=True) assert res.status_code == 200 # Delete it. res = client.post( delete_view_url, data={'id': rec_uuid}, follow_redirects=True) assert res.status_code == 200 # View the delete record res = client.get(detail_view_url) assert res.status_code == 200 assert '<pre>null</pre>' in res.get_data(as_text=True) # Delete it again res = client.post( delete_view_url, data={'id': rec_uuid}, follow_redirects=True) assert res.status_code == 200
def create_admin(app=None): admin = Admin(app, name='CleanBlogAdmin', index_view=MyIndexView(), base_template='admin/my_master.html') #admin.add_view(MyView(name='Hello')) admin.add_view(UserView(User)) admin.add_view(PostView(Post))
def create_admin(app): admin = Admin(app) admin.add_view(ModelView(Envelope, db.session)) admin.add_view(ModelView(Budget, db.session)) return admin
class AdminView(object): """Main Admin class View""" def __init__(self, app_name): self.admin = Admin(name=app_name, template_mode='bootstrap3', index_view=MyHomeView()) def init(self, app): """Init flask admin""" self.admin.init_app(app) self._add_views() def _add_views(self): self._add_models_to_menu() def _add_models_to_menu(self): ev = EventView(Event, db.session) self.admin.add_view(ev) @staticmethod def init_login(app): """Init login""" login_manager = login.LoginManager() login_manager.init_app(app) # Create user loader function @login_manager.user_loader def load_user(user_id): return db.session.query(User).get(user_id)
def test_admin(app, db): """Test admin interface.""" assert isinstance(ca, dict) assert isinstance(ta, dict) assert 'model' in ca assert 'modelview' in ca assert 'model' in ta assert 'modelview' in ta # Create admin admin = Admin(app, name='Example: Sequence Generator') # Add views admin.add_view(ta['modelview'](ta['model'], db.session)) admin.add_view(ca['modelview'](ca['model'], db.session)) with app.app_context(): # Create test data seq = Sequence(Template.create('ID', 'File {counter}')) assert seq.next() == 'File 0' assert seq.next() == 'File 1' assert seq.next() == 'File 2' db.session.commit() with app.test_request_context(): request_url = url_for('counter.reset_view') with app.test_client() as client: # Reset counter client.post(request_url, data={'start': 0, 'rowid': 'File {counter}'}, follow_redirects=False) # Assert that reset was successful assert seq.next() == 'File 0'
def register(app): """ Register blueprints :param app: a flask app instance :return: """ app.register_blueprint(home_routes) admin = Admin(app, name='Open Event API', template_mode='bootstrap3', index_view=MyAdminIndexView(), base_template='admin_base.html') # Get all the models in the db, all models should have a explicit __tablename__ classes, models, table_names = [], [], [] # noinspection PyProtectedMember for class_ in list(db.Model._decl_class_registry.values()): try: table_names.append(class_.__tablename__) classes.append(class_) except: pass for table in list(db.metadata.tables.items()): if table[0] in table_names: models.append(classes[table_names.index(table[0])]) for model in models: admin.add_view(AdminModelView(model, db.session))
def create_app(app=None, config_file=None): if not app: app = Flask(__name__, template_folder="views") # Config files app.config.from_pyfile("config/base.py") if config_file: app.config.from_pyfile("config/{}.py".format(config_file)) # Extensions Foundation(app) admin = Admin(app, name='Bolsa de Trabajo', template_mode='bootstrap3') """ CONTROLADORES """ # Blueprints app.register_blueprint(frontend) # Admin Views admin.add_view(AdminSkillView(Skill, db.session)) admin.add_view(AdminStudentView(Student, db.session)) admin.add_view(AdminCompanyView(Company, db.session)) return app
def create_app(script_info=None): """Create app.""" app = Flask(__name__) # logging if not os.path.exists(user_data_dir): os.makedirs(user_data_dir) log_dir = os.path.join(user_data_dir, 'log') if not os.path.exists(log_dir): os.makedirs(log_dir) peewee_logger = logging.getLogger('peewee') peewee_logger.setLevel(logging.INFO) chardet_logger = logging.getLogger('chardet') chardet_logger.setLevel(logging.INFO) default_log_file = os.path.join(log_dir, 'iqdb_tagger_server.log') file_handler = TimedRotatingFileHandler(default_log_file, 'midnight') file_handler.setLevel(logging.WARNING) file_handler.setFormatter(logging.Formatter('<%(asctime)s> <%(levelname)s> %(message)s')) app.logger.addHandler(file_handler) app.logger.addHandler(peewee_logger) app.logger.addHandler(chardet_logger) # reloader reloader = app.config['TEMPLATES_AUTO_RELOAD'] = \ bool(os.getenv('IQDB_TAGGER_RELOADER')) or app.config['TEMPLATES_AUTO_RELOAD'] # NOQA if reloader: app.jinja_env.auto_reload = True app.config['SECRET_KEY'] = os.getenv('IQDB_TAGGER_SECRET_KEY') or os.urandom(24) app.config['WTF_CSRF_ENABLED'] = False # debug debug = app.config['DEBUG'] = bool(os.getenv('IQDB_TAGGER_DEBUG')) or app.config['DEBUG'] if debug: app.config['DEBUG'] = True app.config['LOGGER_HANDLER_POLICY'] = 'debug' logging.basicConfig(level=logging.DEBUG) pprint.pprint(app.config) print('Log file: {}'.format(default_log_file)) print('script info:{}'.format(script_info)) db_path = os.getenv('IQDB_TAGGER_DB_PATH') or default_db_path init_program() init_db(db_path) # app and db app.app_context().push() @app.shell_context_processor def shell_context(): # pylint: disable=unused-variable return {'app': app} # flask-admin app_admin = Admin( app, name='IQDB Tagger', template_mode='bootstrap3', index_view=views.HomeView(name='Home', template='iqdb_tagger/index.html', url='/')) app_admin.add_view(views.MatchView()) # app_admin.add_view(ModelView(ImageMatch, category='DB')) # app_admin.add_view(ModelView(ImageMatchRelationship, category='DB')) # app_admin.add_view(ModelView(ImageModel, category='DB')) # app_admin.add_view(ModelView(MatchTagRelationship, category='DB')) # routing app.add_url_rule('/thumb/<path:basename>', view_func=thumb) return app
def register(self,app, options, first_registration=False): print app admin = Admin(app, name='blog') for v in self.views: admin.add_view(v) return super(AdminBlueprint, self).register(app, options, first_registration)
class InvenioAdmin(object): """Invenio-Admin extension. :param app: Flask application. :param entry_point_group: Name of entry point group to load views/models from. """ def __init__(self, app=None, anonymous=False, **kwargs): """InvenioAdmin extension initialization. If `anonymous` is True, the admin views are accessible to anonymous users and all security checks are bypassed (use for testing only). """ self.anonymous = anonymous if app: self.init_app(app, **kwargs) def init_app(self, app, entry_point_group='invenio_admin.views', **kwargs): """Flask application initialization.""" self.init_config(app) # Create admin instance. index_view = AdminIndexView if self.anonymous \ else ProtectedAdminIndexView self.admin = Admin( app, name=app.config['ADMIN_APPNAME'], template_mode=kwargs.get('template_mode', 'bootstrap3'), index_view=index_view()) # Load administration interfaces defined by entry points. if entry_point_group: for ep in pkg_resources.iter_entry_points(group=entry_point_group): adminview_dict = dict(ep.load()) assert 'model' in adminview_dict, \ "Admin's entrypoint dictionary must define the 'model'" assert 'modelview' in adminview_dict, \ "Admin's entrypoint dictionary must define the 'modelview'" model = adminview_dict.pop('model') modelview = adminview_dict.pop('modelview') # If not in anonymous access mode add model-based security if not self.anonymous: modelview = protected_adminview_factory(modelview) self.admin.add_view( modelview(model, db.session, **adminview_dict)) app.extensions['invenio-admin'] = self def init_config(self, app): """Initialize configuration.""" # Set default configuration for k in dir(config): if k.startswith("ADMIN_"): app.config.setdefault(k, getattr(config, k))
def create_app(): app = Flask(__name__) app.debug=True app.secret_key = 'fddfa' # 设置配置文件 app.config.from_object('settings.BaseConfig') # 注册蓝图 app.register_blueprint(app01_blue,url_prefix='/app01') app.register_blueprint(rbac_blue,url_prefix='/rbac') # 注册后台管理的组件 flask_admin = Admin(base_template='admin/base_menu.html') # 使用自己的模板,覆盖原来的模板 flask_admin.init_app(app) # flask_admin.add_view(CustomView(name='cus_name',endpoint='helloworld')) # 上一句,假如设定了name属性,在页面菜单显示name的值,否则显示customView, # 设置了endpoint属性,则是会改变url,url就是endpoint的值 models = [Group,User,Role,] for model in models: flask_admin.add_view( # CustomModelView(model, session_conn,name='权限相关')) # 如果设置name属性,则这些表都会显示在一组 CustomModelView(model, session_conn)) # 类似于注册处理这个model表的类 flask_admin.add_view(MenuModelView(Menu,session_conn,endpoint='menu')) flask_admin.add_view(PermissionModelView(Permission,session_conn,endpoint='permission')) return app
def test_admin(app): """Test flask-admin interace.""" InvenioAccounts(app) assert isinstance(role_adminview, dict) assert isinstance(user_adminview, dict) assert 'model' in role_adminview assert 'modelview' in role_adminview assert 'model' in user_adminview assert 'modelview' in user_adminview admin = Admin(app, name="Test") user_model = user_adminview.pop('model') user_view = user_adminview.pop('modelview') admin.add_view(user_view(user_model, db.session, **user_adminview)) # Test activation and deactivation with app.app_context(): # create user and save url for testing request_url = url_for("user.action_view") kwargs = dict(email="*****@*****.**", active=False, password=encrypt_password('aafaf4as5fa')) _datastore.create_user(**kwargs) _datastore.commit() with app.app_context(): with app.test_client() as client: inserted_id = _datastore.get_user('*****@*****.**').id res = client.post( request_url, data={'rowid': inserted_id, 'action': 'activate'}, follow_redirects=True ) assert res.status_code == 200 res = client.post( request_url, data={'rowid': inserted_id, 'action': 'inactivate'}, follow_redirects=True ) assert res.status_code == 200 pytest.raises(ValueError, client.post, request_url, data={'rowid': -42, 'action': 'inactivate'}, follow_redirects=True ) pytest.raises(ValueError, client.post, request_url, data={'rowid': -42, 'action': 'activate'}, follow_redirects=True )
def test_modal_edit(): # bootstrap 2 - test edit_modal app_bs2 = Flask(__name__) admin_bs2 = Admin(app_bs2, template_mode="bootstrap2") class EditModalOn(fileadmin.FileAdmin): edit_modal = True editable_extensions = ('txt',) class EditModalOff(fileadmin.FileAdmin): edit_modal = False editable_extensions = ('txt',) path = op.join(op.dirname(__file__), 'files') edit_modal_on = EditModalOn(path, '/files/', endpoint='edit_modal_on') edit_modal_off = EditModalOff(path, '/files/', endpoint='edit_modal_off') admin_bs2.add_view(edit_modal_on) admin_bs2.add_view(edit_modal_off) client_bs2 = app_bs2.test_client() # bootstrap 2 - ensure modal window is added when edit_modal is enabled rv = client_bs2.get('/admin/edit_modal_on/') eq_(rv.status_code, 200) data = rv.data.decode('utf-8') ok_('fa_modal_window' in data) # bootstrap 2 - test edit modal disabled rv = client_bs2.get('/admin/edit_modal_off/') eq_(rv.status_code, 200) data = rv.data.decode('utf-8') ok_('fa_modal_window' not in data) # bootstrap 3 app_bs3 = Flask(__name__) admin_bs3 = Admin(app_bs3, template_mode="bootstrap3") admin_bs3.add_view(edit_modal_on) admin_bs3.add_view(edit_modal_off) client_bs3 = app_bs3.test_client() # bootstrap 3 - ensure modal window is added when edit_modal is enabled rv = client_bs3.get('/admin/edit_modal_on/') eq_(rv.status_code, 200) data = rv.data.decode('utf-8') ok_('fa_modal_window' in data) # bootstrap 3 - test modal disabled rv = client_bs3.get('/admin/edit_modal_off/') eq_(rv.status_code, 200) data = rv.data.decode('utf-8') ok_('fa_modal_window' not in data)
def init_admin(): # Initialize flask-security user_datastore = SQLAlchemyUserDatastore(db, models.User, models.Role) security = Security(app, user_datastore) # Initialize custom admin views admin = Admin(app, name='trevorroman.com', template_mode='bootstrap3') admin.add_view(PostView(models.Post, db.session)) admin.add_view(UserView(models.User, db.session)) admin.add_view(TagView(models.Tag, db.session)) return admin, user_datastore
def test_admin(app): """Test Flask-Admin interace.""" admin = Admin(app, name='Test') assert 'model' in set_adminview assert 'modelview' in set_adminview # Register both models in admin model = set_adminview.pop('model') view = set_adminview.pop('modelview') admin.add_view(view(model, db.session, **set_adminview)) # Check if generated admin menu contains the correct items menu_items = {str(item.name): item for item in admin.menu()} assert 'OAI-PMH' in menu_items assert menu_items['OAI-PMH'].is_category() submenu_items = { str(item.name): item for item in menu_items['OAI-PMH'].get_children() } assert 'Sets' in submenu_items assert isinstance(submenu_items['Sets'], menu.MenuView) # Create a test set. with app.app_context(): test_set = OAISet(id=1, spec='test', name='test_name', description='some test description', search_pattern='test search') db.session.add(test_set) db.session.commit() with app.test_request_context(): index_view_url = url_for('oaiset.index_view') delete_view_url = url_for('oaiset.delete_view') detail_view_url = url_for('oaiset.details_view', id=1) with app.test_client() as client: # List index view and check record is there. res = client.get(index_view_url) assert res.status_code == 200 # Deletion is forbiden. res = client.post( delete_view_url, data={'id': 1}, follow_redirects=True) assert res.status_code == 200 # View the deleted record. res = client.get(detail_view_url) assert res.status_code == 200 assert 1 == OAISet.query.count()
def create_app(config_name): '''Flask application factory function''' app = Flask(__name__) app.config.from_object(config[config_name]) config[config_name].init_app(app) app.jinja_env.line_statement_prefix = '%' bootstrap.init_app(app) db.init_app(app) app.user_datastore = PeeweeUserDatastore(db, User, Role, UserRoles) security = Security(app, app.user_datastore) # Setup blueprints from .public import public as public_blueprint app.register_blueprint(public_blueprint) from .member import member as member_blueprint app.register_blueprint(member_blueprint) from .board import board as board_blueprint app.register_blueprint(board_blueprint) from .invoice import invoice as invoice_blueprint app.register_blueprint(invoice_blueprint) # Setup flask-admin from .admin.controller import MyModelView, MyAdminView admin = Admin(app, 'Admin Panel', template_mode='bootstrap3', index_view=MyAdminView( name='Admin Index', template='admin/index.html', url='/admin')) admin.add_view(MyModelView(User)) admin.add_view(MyModelView(Role)) admin.add_view(MyModelView(UserRoles)) # define a context processor for merging flask-admin's template context # into the flask-security views. @security.context_processor def security_context_processor(): return dict( admin_base_template=admin.base_template, admin_view=admin.index_view, h=admin_helpers ) return app
def init_app(app): app.register_blueprint(bp) app.json_encoder = h.JSONEncoder processor_admin = Admin(app, url='/processor_admin', endpoint='/processor_admin', name='Processor Portal', base_template='processor/admin/base.html', template_mode='bootstrap3') processor_admin.add_view(ChargeView( Charge, db.session, endpoint='charges')) return app
def init_app(app): admin = Admin( app, name='Dashboard', template_mode='bootstrap3', endpoint='admin', index_view=IndexView(), ) admin.add_view(UserModelView(User, db.session)) admin.add_view(CafeModelView(Cafe, db.session)) admin.add_view(TopicModelView(Topic, db.session)) if app.config.get('ADMIN_STATIC_URL'): app.jinja_env.globals['url_for'] = url_for
def setup(app): admin = Admin(app, name='house_tracker', template_mode='bootstrap3', index_view=MyAdminIndexView()) admin.add_view(CommunityView(Community, get_session())) admin.add_view(HouseView(House, get_session())) admin.add_view(CommunityRecordView(CommunityRecord, get_session())) admin.add_view(HouseRecordView(HouseRecord, get_session()))
def _init_admin(app): """ Initialize the admin and add views """ admin = Admin(app, name='gainful', template_mode='bootstrap3') admin.add_view(VisiblePkView(User, db.session)) admin.add_view(VisiblePkView(Org, db.session)) admin.add_view(AnswerModelView(Answer, db.session)) admin.add_view(VisiblePkView(Group, db.session))
def create_app(): app = Flask(__name__) app.config.from_object(Config) db.init_app(app) security = Security(app, user_datastore) admin = Admin(app) admin.add_view(ActivityAdmin(Activity, db.session)) admin.add_view(UserAdmin(User, db.session)) admin.add_view(PageAdmin(Page, db.session)) # import ipdb; ipdb.set_trace() app.register_blueprint(content_bp) app.register_blueprint(user_bp) app.add_url_rule('/', 'index', index) return app
def create_app(db): app = Flask(__name__) app.register_blueprint(index_blueprint, url_prefix='/') app.register_blueprint(member_blueprint, url_prefix='/member/') app.config['SECRET_KEY'] = '\xca\x0c\x86\x04\x98@\x02b\x1b7\x8c\x88]\x1b\xd7"+\xe6px@\xc3#\\' app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://*****:*****@localhost/myweb' login = LoginManager() bootstrap = Bootstrap() admin = Admin(name="APP admin", template_mode='bootstrap3') admin.add_view(myview.MyView(name='Hello')) admin.init_app(app) bootstrap.init_app(app) login.init_app(app) db.init_app(app) return app
def create_app(settings_override=None): """Returns an Admin application instance.""" # Create and extend a minimal application app = framework.create_app(__name__, __path__, settings_override, security_register_blueprint=False) from .invite_view import InviteView from .user_view import UserView #Init the flask-admin admin = Admin(app, name='FogMine Admin', url='/', index_view=MyAdminIndexView(url='/'), template_mode='bootstrap3', base_template='admin/my_master.html') admin.add_view(UserView(db.session)) admin.add_view(InviteView(db.session)) return app
def create_app(): app = Flask(__name__) app.config.from_object('config') db.init_app(app) Migrate(app, db) # Register the blueprint applications from .v1 import api as api_blueprint app.register_blueprint(api_blueprint, url_prefix='/v1') # Flask-Admin admin = Admin(app, name='研究時間記録', template_mode='bootstrap3') admin.add_view(UserAdmin(User, db.session, name='ユーザ')) admin.add_view(RecordAdmin(Record, db.session, name='研究記録')) # Define special routes @app.after_request def after_request(response): for query in get_debug_queries(): if query.duration >= app.config['SLOW_DB_QUERY_TIME']: app.logger.warning( 'Slow query: %s\nParameters: %s\n' 'Duration: %fs\nContext: %s\n' % (query.statement, query.parameters, query.duration, query.context) ) return response @app.errorhandler(404) def page_not_found(e): """Return a custom 404 error.""" return jsonify( error='Not found', message='Sorry, Nothing at this api.', status=404 ) @app.errorhandler(500) def page_not_found(e): """Return a custom 500 error.""" return jsonify( error='Internal server error', message='Sorry, unexpected error: {}'.format(e), status=500 ) return app
# -*- coding: utf-8 -*- from app.models import User, Post, Category from app import app, db from flask_admin.contrib.sqla import ModelView from flask_admin import Admin from flask_login import current_user from flask import redirect, url_for class ModelViewSecured(ModelView): def is_accessible(self): if current_user.is_authenticated: return current_user.email == app.config['ADMIN_EMAIL'] return False def inaccessible_callback(self, name, **kwargs): return redirect(url_for('login')) admin = Admin(app, name='blog-admin', template_mode='bootstrap3') admin.add_view(ModelViewSecured(User, db.session)) admin.add_view(ModelViewSecured(Post, db.session)) admin.add_view(ModelViewSecured(Category, db.session))
from flask import Flask from config import Config from flask_restful import Api from flask_bcrypt import Bcrypt from flask_sqlalchemy import SQLAlchemy from flask_cors import CORS from flask_admin import Admin from flask_migrate import Migrate # from flask_apidoc import ApiDoc app = Flask(__name__) app.config.from_object(Config) db = SQLAlchemy(app) bcrypt = Bcrypt(app) # doc = ApiDoc(app=app) api = Api(app) migrate = Migrate(app, db) admin = Admin(app, name='Better Pledge', template_mode='bootstrap3') CORS(app) from app import routes
def setup_admin(app): app.secret_key = os.environ.get('FLASK_APP_KEY', 'sample key') app.config['FLASK_ADMIN_SWATCH'] = 'cerulean' admin = Admin(app, name='4Geeks Admin', template_mode='bootstrap3') # Add your models here, for example this is how we add a the User model to the admin admin.add_view(ModelView(User, db.session)) admin.add_view(ModelView(Order, db.session)) admin.add_view(ModelView(OrderType, db.session)) admin.add_view(ModelView(OrderDetail, db.session)) admin.add_view(ModelView(Product, db.session)) admin.add_view(ModelView(Category, db.session)) admin.add_view(ModelView(UserTypes, db.session))
from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_admin import Admin app = Flask(__name__) app.secret_key = '8972^&*A*(*&A*S(D*A()SD*kjahsđ12738712' app.config[ 'SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@localhost/saledb3?charset=utf8' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True db = SQLAlchemy(app=app) admin = Admin(app=app, name='Quan ly', template_mode='bootstrap4')
description = db.Column(db.String(255)) class User(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(255), unique=True) password = db.Column(db.String(255)) active = db.Column(db.Boolean()) confirmed_at = db.Column(db.DateTime()) roles = db.relationship('Role', secondary=roles_users, backref=db.backref('users', lazy='dynamic')) moment = Moment(app) admin = Admin(app) user_datastore = SQLAlchemyUserDatastore(db, User, Role) security = Security(app, user_datastore) admin.add_view(ModelView(Role, db.session)) admin.add_view(ModelView(User, db.session)) @app.route('/') @login_required def index(): dt = datetime.utcnow() return render_template('index.html', dt=dt) @app.route('/<path>')
from flask_admin import Admin, AdminIndexView from app import app from app.models import Order, Meal, User, Category, Association from app import db from flask import redirect, url_for class MyModelView(ModelView): def is_accessible(self): return current_user.is_authenticated def inaccessible_callback(self, name, **kwargs): return redirect(url_for('login')) class MyAdminIndexView(AdminIndexView): def is_accessible(self): if current_user.is_authenticated: return current_user.is_admin def inaccessible_callback(self, name, **kwargs): return redirect(url_for('login')) admin = Admin(app, index_view=MyAdminIndexView()) admin.add_view(ModelView(Order, db.session)) admin.add_view(ModelView(Meal, db.session)) admin.add_view(ModelView(User, db.session)) admin.add_view(ModelView(Category, db.session)) admin.add_view(ModelView(Association, db.session))
# coding: utf-8 from flask_admin.contrib.sqla import ModelView from flask_admin import Admin from app.models import OperatingSystem, Project, Release, TestRun admin = Admin(name='QPD', template_mode='bootstrap3') class TestRunView(ModelView): form_excluded_columns = [ 'total', 'total_executed', 'percent_passed', 'percent_failed', 'percent_executed', 'percent_not_executed', ] def after_model_change(self, form, model, is_created): model.update_stats() self.session.commit() def configure_admin(app, db): admin.init_app(app) # Admin pages admin.add_view( ModelView(OperatingSystem, db.session, endpoint='operatingsystems')) admin.add_view(ModelView(Project, db.session, endpoint='projects')) admin.add_view(ModelView(Release, db.session, endpoint='releases'))
from project.models import User @login_manager.user_loader def load_user(user_id): return User.query.filter(User.id == int(user_id)).first() ######################## #### error handlers #### ######################## @app.errorhandler(403) def forbidden_page(error): return render_template("errors/403.html"), 403 @app.errorhandler(404) def page_not_found(error): return render_template("errors/404.html"), 404 @app.errorhandler(500) def server_error_page(error): return render_template("errors/500.html"), 500 admin = Admin(app, name='Pet Portrait Club', template_mode='bootstrap3') admin.add_view(ModelView(models.User, db.session))
return current_user.role == 'admin' def inaccessible_callback(self, name, **kwargs): # redirect to login page if user doesn't have access return redirect(url_for('error.nice_try')) db = SQLAlchemy() migrate = Migrate() login = LoginManager() login.login_view = 'auth.login' login.login_message = 'Please log in to access this page.' bootstrap = Bootstrap() moment = Moment() mail= Mail() admin = Admin(index_view=MyAdminIndexView(), name='wriitr', template_mode='bootstrap3') max_sections = 15 def create_app(): app = Flask(__name__) app.config.from_object('config.Config') app.static_folder = 'static' # admin from app import models from .models import User, Section from .models import Project admin.init_app(app) #admin.add_view(UserModelView(User, db.session)) #admin.add_view(UserModelView(Project, db.session))
from sqlite3 import Error import json from flask import Flask, jsonify, request, redirect, url_for from app.forms import LoginForm, RegistrationForm from flask import flash from .models import User from flask_login import current_user, login_user from flask_login import login_required, logout_user from app import db from flask_admin import Admin from flask_admin.contrib.sqla import ModelView from functools import wraps # Allow user to visit http://localhost:5000/admin and http://localhost:5000/admin/user # We can therefore upgrade a user from simple user to admin admin = Admin(app, name='clickclacktype', template_mode='bootstrap3') admin.add_view(ModelView(User, db.session)) # The following functions query and update the database def create_connection(db_file): """ create a database connection to a SQLite database """ try: conn = sqlite3.connect(db_file) return conn except Error as e: print("Error") print(e)
return super(PyQdbSAdminIndexView, self).index() @expose('/login/', methods=['GET', 'POST']) def login(self): form = LoginForm(request.form) if form.validate_on_submit(): user = Users.query.filter( Users.username == form.username.data).first() if user and user.has_admin() and user.check_password( form.password.data): flask_login.login_user(user) return redirect(url_for('admin.index')) else: flash("Invalid username or password.") return redirect(url_for('admin.login')) self._template_args['form'] = form return super(PyQdbSAdminIndexView, self).index() @expose('/logout/') def logout(self): flask_login.logout_user() return redirect(url_for('admin.index')) admin = Admin(index_view=PyQdbSAdminIndexView()) admin.add_view(PyQdbSQuoteModelView(Quotes, db.session)) admin.add_view(PyQdbSUserModelView(Users, db.session))
import os import logging from flask import Flask from playhouse.flask_utils import FlaskDB from flask_admin import Admin from hse_arch.admin import init_admin # from hse_arch.api import init_app db = FlaskDB() # Создаем обертку над БД admin = Admin() # Создаем обертку над админкой # restful_api = Api() # не уверен, что это делается здесь # auth = Auth() # не уверен, что это делается здесь # peewee_api = RestAPI() # не уверен, что это делается здесь config = { "production": "config.ProductionConfig", "development": "config.DevelopmentConfig", "testing": "config.TestingConfig", "default": "config.Config" } # TODO: https://damyanon.net/post/flask-series-configuration/ - возможно, стоит использовать env переменную def create_app(config_class): from hse_arch.models.category import Category from hse_arch.models.customer import Customer from hse_arch.models.order import Order, OrderItem from hse_arch.models.product import Product, ProductIngredient, Ingredient from hse_arch.models.producers import Producer from hse_arch.models.sets import Set, SetProduct from hse_arch.models.user import User
from flask_mqtt import Mqtt from flask_socketio import SocketIO from sqlalchemy import or_, and_, desc, asc, text from config import Config from helpers import make_celery, save_event_from_dict ############## # initialize # ############## eventlet.monkey_patch() app = Flask(__name__) app.config.from_object(Config) socketio = SocketIO(app) celery = make_celery(app) admin = Admin(app, name='Database Manager', template_mode='bootstrap3') ################## # delayed import # ################## from models import db, Event, EventSchema db.init_app(app) migrate = Migrate(app, db) mqtt = Mqtt(app) ############### # admin panel # ############### admin.add_view(ModelView(Event, db.session))
import os from flask import Flask from flask_admin import Admin from flask_bcrypt import Bcrypt from flask_cors import CORS from flask_sqlalchemy import SQLAlchemy from werkzeug.middleware.proxy_fix import ProxyFix # instantiate extensions db = SQLAlchemy() cors = CORS() bcrypt = Bcrypt() admin = Admin(template_mode="bootstrap3") def create_app(script_info=None): # instantiate the app app = Flask(__name__) app.wsgi_app = ProxyFix(app.wsgi_app, x_for=1, x_proto=1, x_host=1, x_port=1) # set config app_settings = os.getenv("APP_SETTINGS") app.config.from_object(app_settings) # set up extensions
app = Flask(__name__) app.config.from_object(Config) app.config['DEBUG'] = False db = SQLAlchemy(app) migrate = Migrate(app, db) Bootstrap(app) socketio.init_app(app) toolbar = DebugToolbarExtension(app) login = LoginManager(app) login.login_view = 'auth.login' admin = Admin(app, template_mode='bootstrap3') @app.errorhandler(404) def not_found(error): return render_template('errors/404.html'), 404 from app.module_auth.controllers import module_auth as auth_module from app.module_main.controllers import module_main as main_module from app.module_task.controllers import module_task as task_module from app.module_role.controllers import module_role as role_module from app.module_role.controllers import module_userrole as user_role_module app.register_blueprint(auth_module)
#! -*- coding:utf-8 -*- # Created by F1renze on 2018/3/18 13:52 __author__ = 'F1renze' __time__ = '2018/3/18 13:52' from flask import Blueprint admin_blueprint = Blueprint('admin_blueprint', __name__) from flask_admin import Admin from .override_views import MyIndexView f_admin = Admin(name='后台管理', template_mode='bootstrap3', base_template='admin/mybase.html', index_view=MyIndexView()) from . import views, modelviews
details_modal = True #column_editable_list = ('first_name', 'last_name', 'email') list_template = 'admin/model/list.html' #form_edit_rules = [ #CustomizableField('email', field_args={ # 'readonly': True # })] # ''' ''' class HandlingView(HandlingView): column_display_all_relations = True ''' admin = Admin(index_view=MyHomeView(menu_icon_type='ti', menu_icon_value='ti-home'), category_icon_classes={'CRM': 'ti ti-money'}) ''' admin = Admin(name='CMS', template_mode='bootstrap3') admin.add_view(ModelView(User, db.session)) ''' #admin.add_view(MasterUserView(User, db.session, endpoint='userss', category='CRM', name='Лиды', menu_icon_type='ti', menu_icon_value='ti-link')) #admin.add_view(DomainView(Role, db.session, category='CRM', name='Роли', menu_icon_type='ti', menu_icon_value='ti-link')) #admin.add_view(UserView(User, db.session, category='CRM', name='Юзеры', menu_icon_type='ti', menu_icon_value='ti-user')) #admin.add_view(UserView(Profile, db.session, category='CRM', name='Профили', menu_icon_type='ti', menu_icon_value='ti-user')) #admin.add_view(UserView(Source, db.session, category='CRM', name='Источники', menu_icon_type='ti', menu_icon_value='ti-user')) #admin.add_view(HandlingView(Handling, db.session, category='CRM', name='Касания', menu_icon_type='ti', menu_icon_value='ti-user')) #admin.add_view(UserView(Role, db.session, category='CRM', name='Роли', menu_icon_type='ti', menu_icon_value='ti-user'))
from flask_script import Manager from wtforms import StringField from wtforms.validators import DataRequired from models import Student, Teacher, College, Major, Subject, Page, Test, Class, db from views import app bootstrap = Bootstrap() bootstrap.init_app(app) app.config['BOOTSTRAP_SERVE_LOCAL'] = True migrate = Migrate(app, db) manager = Manager(app) manager.add_command('db', MigrateCommand) admin = Admin() admin.init_app(app) class IdBrandForm(BaseForm): id = StringField(validators=[DataRequired()]) class IdBrandModelView(ModelView): column_display_pk = True form_base_class = IdBrandForm admin.add_view(IdBrandModelView(Student, db.session)) admin.add_view(IdBrandModelView(Teacher, db.session)) admin.add_view(ModelView(College, db.session))
from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate from flask_login import LoginManager, current_user from flask_admin import Admin from flask_admin.contrib.sqla import ModelView from flask_restful import Resource, Api, reqparse from os import listdir from os.path import isfile, join app = Flask(__name__) app.config.from_object(Config) db = SQLAlchemy(app) migrate = Migrate(app, db) login = LoginManager(app) login.login_view = 'login' admin = Admin(app) api = Api(app) from app import routes, models, errors from app.models import * class OrderModelView(ModelView): def is_accessible(self): if not current_user.is_active or not current_user.is_authenticated: return False if current_user.username == 'admin': return True return False
PASSPHRASE = 'PF5H8S9t7u' APP_ID = 'MEoztReRyeHzaiXxaecR65HnqE98tz9g' APP_SECRET = '01c5d1f8d3bfa9966786065c5a2d829d7e84cf26fbfb4a47c91552cb7c091608' UPLOAD_FOLDER = 'static/records' ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif']) app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER now = datetime.datetime.now() class IngAdmin(sqla.ModelView): column_display_pk = True admin = Admin(app, name='telaki') admin.add_view(IngAdmin(Message, db.session)) admin.add_view(IngAdmin(Blast, db.session)) def compose_messages(filename): path = '%s/%s' % (UPLOAD_FOLDER, filename) book = xlrd.open_workbook(path) # get the first worksheet sheet = book.sheet_by_index(0) rows = sheet.nrows cols = 2 print 'xxxxxxxxxxxxxxxxxxx' print rows
from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_admin import Admin import logging from celery import Celery from redis import Redis from configs import CeleryConfig app = Flask(__name__) app.config.from_pyfile('../configs.py') for key, value in app.config.items(): print(key, '\t', value) db = SQLAlchemy(app=app) admin = Admin(app, name='火币自动交易', template_mode='bootstrap3') redis = Redis.from_url(app.config['REDIS_URL']) log = logging.getLogger('HuoBi') # todo config not value celery = Celery(app.import_name) celery.config_from_object(CeleryConfig) TaskBase = celery.Task class ContextTask(TaskBase): abstract = True def __call__(self, *args, **kwargs): with app.app_context(): return TaskBase.__call__(self, *args, **kwargs)
class BaseModelView(ModelView): def on_model_change(self, form, model, is_created): model.generate_slug() return super(BaseModelView, self.on_model_change(self, form, model, is_created)) class AdminView(AdminMixin, ModelView): pass class HomeAdminView(AdminMixin, AdminIndexView): pass class PostAdminView(AdminMixin, BaseModelView): form = ['title', 'body', 'tags'] class TagAdminView(AdminMixin, BaseModelView): form = ['name', 'posts'] admin = Admin(app, 'FlaskApp', url='/', index_view=HomeAdminView(name='Home')) admin.add_view(AdminView(Post, db.session)) admin.add_view(AdminView(Tag, db.session)) user_datastore = SQLAlchemyUserDatastore(db, User, Role) security = Security(app, user_datastore)
from flask_admin import Admin from flask_admin.contrib.sqla import ModelView from db import session from models.dictionary import Dictionary, Word admin = Admin(name='Sentiment dashboard', template_mode='bootstrap3') admin.add_view(ModelView(Dictionary, session.session)) admin.add_view(ModelView(Word, session.session))
"activity_start_time", "activity_end_time", "activity_location", ) column_searchable_list = ("id", "uid", "description", "content", "source") column_default_sort = ('id', True) column_labels = { "id": "序号", "uid": "发布用户ID", "post_type": "类型 0 普通文字信息 2 校园活动", "description": "描述", "content": "内容或者URL", "post_time": "发布时间", "visibility": "删除标记(1未删除 2删除)", "source": "来自", "photo_list_json": "图片列表", "activity_start_time": "活动开始时间", "activity_end_time": "活动结束时间", "activity_location": "活动地点" } page_size = 50 admin = Admin(name="课程后台管理", template_mode='bootstrap3') admin.add_view(UserModelView(models.User, db.session, "用户管理")) admin.add_view(PostModelView(models.Post, db.session, "动态管理"))
from flask_admin import Admin from flask_babelex import Babel from contorllers.admin import MyView babel = Babel() flask_admin = Admin( name=u'后台管理系统', index_view=MyView(), base_template='admin/my_master.html', )
from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_admin import Admin from flask_login import LoginManager from flask_mail import Mail app = Flask(__name__) app.secret_key = '3^@&@&!&(@*UGUIEIU&@^!*(@&*(SS' app.config[ 'SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:A!23456a@localhost/bookstoredb?charset=utf8' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True db = SQLAlchemy(app=app) admin = Admin(app=app, name='Book Store', template_mode="bootstrap4") login = LoginManager(app=app) app.config['MAIL_SERVER'] = 'smtp.gmail.com' app.config['MAIL_PORT'] = 587 app.config['MAIL_USERNAME'] = '******' app.config['MAIL_PASSWORD'] = '******' app.config['MAIL_USE_TLS'] = True app.config['MAIL_USE_SSL'] = False db = SQLAlchemy(app=app) login = LoginManager(app=app) mail = Mail(app=app)
from flask_admin.contrib.sqla import ModelView from app.__init__ import app, db from app.models import AnonymousUser from flask import redirect, flash, url_for class MyAdminIndexView(admin.AdminIndexView): def is_accessible(self): return login.current_user.is_admin() def inaccessible_callback(self, name, **kwargs): return redirect(url_for('auth.login')) admin = Admin( app, name="admin site", template_mode="bootstrap3", index_view=MyAdminIndexView(), base_template='admin/logout.html' ) # sql models management from app.models import User admin.add_view(ModelView(User, db.session)) from app.models import Role admin.add_view(ModelView(Role, db.session))
# MAIL mail = Mail(app) # db config # db = SQLAlchemy(app) db.init_app(app) # ADMIN PANEL admin = Admin(app,template_mode='bootstrap3') class UserView(ModelView): # # column_display_pk = True # # column_edit_pk = True # # list_columns=['name','username','email','password','registered_at'] column_searchable_list = [ 'email','name'] form_excluded_columns = ['tasks', 'registered_at'] def is_accessible(self): if "admin_login" in session: return True return False def on_model_change(self, form, model, is_created):
def init_admin(app_obj): admin = Admin(app_obj, name='Spajam2018_SP', template_mode='bootstrap3') admin.add_view(ModelView(User, db.session, category='User'))
class ImageView(sqla.ModelView): def _list_thumbnail(view, context, model, name): if not model.path: return '' return Markup('<img src="%s">' % url_for( 'static', filename=join("files/", form.thumbgen_filename(model.path)))) column_formatters = {'path': _list_thumbnail} # Alternative way to contribute field is to override it completely. # In this case, Flask-Admin won't attempt to merge various parameters for the field. form_extra_fields = { 'path': form.ImageUploadField('Image', base_path=file_path, thumbnail_size=(100, 100, True)) } admin = Admin(app, index_view=MyAdminIndexView()) admin.add_view(MyModelView(User, db.session)) admin.add_view(MyModelView(Member, db.session)) admin.add_view(MyModelView(Event, db.session)) admin.add_view(MyModelView(League, db.session)) admin.add_view(MyModelView(Team, db.session)) admin.add_view(MyModelView(League_Team, db.session)) admin.add_view(MyModelView(ContactForm, db.session)) # admin.add_view(FileView(File, db.session)) admin.add_view(ImageView(Image, db.session))