app = Flask(__name__) app.jinja_env.auto_reload = True app.config['TEMPLATES_AUTO_RELOAD'] = True app.config['SECRET_KEY'] = os.getenv('SECRET_KEY') or 'you-will-never-guess' app.config['CAS_SERVER'] = 'https://fed.princeton.edu/cas' app.config['CAS_AFTER_LOGIN'] = '******' cas = CAS(app) bootstrap = Bootstrap(app) dummy = "mongodb://*****:*****@ds237989.mlab.com:37989/heroku_cqcm2pgv" MONGODB_URI = os.getenv('MONGODB_URI') or dummy app.config['MONGODB_SETTINGS'] = {'db': 'users', 'host': MONGODB_URI} db = MongoEngine(app) from app.models import User admin = Admin(app, 'TigerMenu Alerts') class UserView(ModelView): def is_accessible(self): return cas.username == "ax2" admin.add_view(UserView(User)) from app import routes
from flask import Flask from config import Configuration from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate, MigrateCommand from flask_script import Manager from flask_admin import Admin from flask_admin.contrib.sqla import ModelView from flask_sslify import SSLify app = Flask(__name__) app.config.from_object(Configuration) sslify = SSLify(app) db = SQLAlchemy(app) migrate = Migrate(app, db) manager = Manager(app) manager.add_command('db', MigrateCommand) from models import * admin = Admin(app) admin.add_view(ModelView(User, db.session)) admin.add_view(ModelView(Clothes, db.session))
def configure_admin(app, admin_models): admin = Admin(app, name="Store backend") for admin_view in admin_models: admin.add_view(admin_view(Product, db.session))
return self._feed_user_choices(form) def edit_form(self, obj): form = super(TweetView, self).edit_form(obj) return self._feed_user_choices(form) # Correct user_id reference before saving def on_model_change(self, form, model, is_created): user_id = model.get('user_id') model['user_id'] = ObjectId(user_id) return model # Flask views @app.route('/') def index(): return '<a href="/admin/">Click me to get to Admin!</a>' if __name__ == '__main__': # Create admin admin = Admin(app, name='Example: PyMongo') # Add views admin.add_view(UserView(db.user, 'User')) admin.add_view(TweetView(db.tweet, 'Tweets')) # Start app app.run(debug=True)
class BookView(ModelView): can_create = False can_delete = False can_edit = False column_list = ['title', 'author', 'is_checked_out'] list_template = 'custom_list.html' # def __init__(self, *args, **kwargs): # super().__init__(*args, **kwargs) # self.static_folder = 'static' def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.static_folder = 'static' def get_query(self): return self.session.query( self.model).filter(self.model.is_checked_out == True) admin = Admin(app, name='Hogwarts Library', template_mode='bootstrap3', index_view=BookView(Book, db.session, name='Check In', url='/admin', endpoint='admin')) from . import routes
if os.getenv('APP_MODE') == "PRODUCTION": votr.config.from_object('production_settings') else: votr.config.from_object('config') db.init_app(votr) # Initialize the database # db.create_all(app=votr) # Create the database migrate = Migrate(votr, db, render_as_batch=True) # create celery object celery = make_celery(votr) admin = Admin(votr, name='Dashboard', index_view=TopicView(Topics, db.session, url='/admin', endpoint='admin')) admin.add_view(AdminView(Users, db.session)) admin.add_view(AdminView(Polls, db.session)) admin.add_view(AdminView(Options, db.session)) admin.add_view(AdminView(UserPolls, db.session)) @votr.route('/') def home(): return render_template('index.html') @votr.route('/signup', methods=['GET', 'POST']) def signup():
def create_app(config=None, env=None): app = Flask(__name__) app.config.from_object('config') db.init_app(app) users_ds = SQLAlchemyUserDatastore(db, User, Role) security = Security(app, users_ds) admin = Admin(app, 'Quiz', base_template='', index_view=UserView(User, db.session, url='/admin'), template_mode='bootstrap3') admin.add_view(QuestionView(Question, db.session, url='/admin/question')) admin.add_view(AnswerView(Answer, db.session, url='/admin/Answer')) @app.route('/') def root(): return render_template('index.html') @app.route('/game') def game(): session['score'] = 0 return redirect('/game/1', 302) @app.route('/answer/<int:qid>/<int:aid>') def answer(qid, aid): if 'score' not in session: session['score'] = 0 q = Question.query.filter_by(id=qid).all() if len(q) < 1: return jsonify({"err": "Invalid question id"}) q = q[0] a = Answer.query.filter_by(id=aid).all() if len(a) < 1: return jsonify({"err": "Invalid answer id"}) if a[0].correct: session['score'] += 10 return jsonify({"correct": a[0].correct}) @app.route('/game/<int:idx>') def gamebyid(idx): if 'score' not in session: session['score'] = 0 q = Question.query.filter_by(id=idx).all()[0] a = q.answers random.shuffle(a) return render_template('game.html', question=q, answers=a, score=session['score']) @app.before_first_request def before_first_request(): print("[*] Migrating database ") db.drop_all() print("[DB]: Cleaned up") db.create_all() print("[DB]: Schema deployed") users_ds.find_or_create_role(name='admin', description='Administrator') users_ds.find_or_create_role(name='user', description='user') password = utils.hash_password(config.SECRET_KEY) users_ds.create_user(email='*****@*****.**', password=password) db.session.commit() # Add admin role to user users_ds.add_role_to_user('*****@*****.**', 'admin') db.session.commit() # Load questions and correct answers from file q = [Question(body=q) for q in open("q.txt", "r").read().splitlines()] a = [ Answer(body=a, correct=True) for a in open("a.txt", "r").read().splitlines() ] for question in q: db.session.add(question) db.session.commit() for answer in a: db.session.add(answer) q[a.index(answer)].answers.append(answer) db.session.commit() # Load false answers from file for l in open("f.txt", "r").read().splitlines(): data = l.split(",") answers = [Answer(body=a, correct=False) for a in data[0:3]] for a in answers: db.session.add(answer) q[int(data[3]) - 1].answers.append(a) db.session.commit() return app
def create_app_test(): app = Flask(__name__) # import configuration # cfg = os.path.join(os.getcwd(), 'app', 'config', config_name + '.py') app.config.from_object(config_test.Config) # app.config.from_pyfile(cfg) app.secret_key = Config.SECRET_KEY # initialize extensions bootstrap.init_app(app) db.init_app(app) # login manager for admin lm.init_app(app) babel.init_app(app) # print(babel.list_translations()) # print(babel.default_locale) # print(babel.default_timezone) # print(babel.translation_directories) csrf.init_app(app) mail.init_app(app) # admin page admin = Admin(app, "Administration", base_template='my_master.html', index_view=MyAdminIndexView(), template_mode="bootstrap3") admin.add_view(SkilvitAdminModelView(PatientDB, db.session)) admin.add_view(SkilvitAdminModelView(PraticienDB, db.session)) admin.add_view( SkilvitAdminModelView(RelationPatientPraticienDB, db.session)) admin.add_view( SkilvitAdminModelView(DemandeConnexionPatientPraticienDB, db.session)) admin.add_view(SkilvitAdminModelView(SituationDB, db.session)) admin.add_view(SkilvitAdminModelView(TacheDB, db.session)) admin.add_view(SkilvitAdminModelView(QuestionnaireDB, db.session)) admin.add_view(SkilvitAdminModelView(AnnotationEntree, db.session)) admin.add_view(SkilvitAdminModelView(SuiviPatient, db.session)) admin.add_view(SkilvitAdminModelView(AlimentationDB, db.session)) admin.add_view(SkilvitAdminModelView(SommeilDB, db.session)) admin.add_view(SkilvitAdminModelView(GlycemieDB, db.session)) admin.add_view(SkilvitAdminModelView(ActivitePhysiqueDB, db.session)) admin.add_view(SkilvitAdminModelView(Anamnese, db.session)) admin.add_view(SkilvitAdminModelView(MasseDB, db.session)) admin.add_view(SkilvitAdminModelView(PriseMedicamentDB, db.session)) # migration migrate.init_app(app, db) moment.init_app(app) @lm.user_loader def load_user(user_id): return PatientDB.query.get(int(user_id)) # import blueprints from .main import main as main_blueprint app.register_blueprint(main_blueprint) print("application lancée") return app
from datetime import datetime from flask import g, redirect, request, url_for from flask_admin import Admin, AdminIndexView, expose from flask_admin.contrib.sqla import ModelView from flask_admin.menu import MenuLink from app import app, db from models import Book, LPElement, User class AdminAuthentication(object): def is_accessible(self): return g.user.is_authenticated and g.user.is_admin() class BaseModelView(AdminAuthentication, ModelView): pass class IndexView(AdminIndexView): @expose('/') def index(self): if not (g.user.is_authenticated and g.user.is_admin()): return redirect(url_for('login', next=request.path)) return self.render('admin/index.html', now=datetime.utcnow()) admin = Admin(app, 'Searchinator Admin', index_view=IndexView()) admin.add_view(ModelView(Book, db.session)) admin.add_view(ModelView(LPElement, db.session)) admin.add_view(ModelView(User, db.session)) admin.add_link(MenuLink(name='Back to App', url='/'))
from flask_admin.contrib.sqla import ModelView from flask_login import LoginManager, current_user from config import Config app = Flask(__name__) app.config.from_object(Config) db = SQLAlchemy(app) migrate = Migrate(app, db) login = LoginManager(app) from models import Project admin = Admin(app, base_template='custom_admin.html') def prefix_name(obj, file_data): parts = os.path.splitext(file_data.filename) return secure_filename("file-%s%s" % parts) class ProjectModelView(ModelView): form_extra_fields = { "photo": form.FileUploadField("photo", base_path="static/img") } def _change_path_data(self, _form): try:
# src/__init__.py import os from flask import Flask from flask_admin import Admin from flask_cors import CORS from flask_sqlalchemy import SQLAlchemy from werkzeug.middleware.proxy_fix import ProxyFix # new # instantiate the extensions db = SQLAlchemy() cors = CORS() 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) # new # set config app_settings = os.getenv("APP_SETTINGS") app.config.from_object(app_settings) # set up extensions
class InitialPanAdminView(AdminMixinDelegator, AdminIndexView): pass """method "generate_slug()" in admin-pannel don't works without this method. flask-admin works differently compared to the class of our model Post and Tag""" class ModifyedModelViewMethod(ModelView): def on_model_change(self, form, model, is_created): model.generate_slug() return super(ModifyedModelViewMethod, self).on_model_change(form,model,is_created) class PostAdminView(AdminView, ModifyedModelViewMethod): #Repair problem with "generate_slug" function form_columns = ['title', 'body','tags','created'] #wich fields to show class TagAdminView(AdminView, ModifyedModelViewMethod): form_columns = ['tagname', 'posts'] #wich fields to show admin=Admin(app, "Back_to_Blog",url='/', index_view=InitialPanAdminView(name='HomeBookmark')) admin.add_view(PostAdminView(Post, db.session)) admin.add_view(TagAdminView(Tag, db.session)) ################# ########################### ###Flask-security user_datastore=SQLAlchemyUserDatastore(db, User, Role) security=Security(app, user_datastore)
return redirect(url_for('admin.login_view')) class FileManager(FileAdmin): def is_accessible(self): if current_user.is_authenticated: return True return False def inaccessible_callback(self, name, **kwargs): return redirect(url_for('admin.login_view')) admin = Admin(app, name='管理中心', base_template='admin/my_master.html', index_view=MyAdminIndexView(name='首页', template='admin/index.html', url='/admin')) admin.add_view(HashView(Search_Hash, db.session, name='磁力Hash')) admin.add_view(KeywordsView(Search_Keywords, db.session, name='首页推荐')) admin.add_view(TagsView(Search_Tags, db.session, name='搜索记录')) admin.add_view(StatusreportView(Search_Statusreport, db.session, name='爬取统计')) admin.add_view(FileManager(file_path, '/uploads/', name='文件管理')) admin.add_view(UserView(User, db.session, name='用户管理')) @manager.command def init_db(): db.create_all() db.session.commit()
form_ajax_refs = { 'author': { 'fields': (User.name, User.email), }, } class UserModelView(SlugModelView): column_list = ['email', 'name', 'active', 'created_timestamp'] column_filters = ('email', 'name', 'active') column_searchable_list = ['email', 'name'] form_columns = ['email', 'password', 'name', 'active'] form_extra_fields = { 'password': PasswordField('New password'), } def on_model_change(self, form, model, is_created): if form.password.data: model.password_hash = User.make_password(form.password.data) return super(UserModelView, self).on_model_change(form, model, is_created) admin = Admin(app, 'Blog Admin', index_view=IndexView()) admin.add_view(EntryModelView(Entry, db.session)) admin.add_view(ModelView(Tag, db.session)) admin.add_view(UserModelView(User, db.session)) admin.add_view( BlogFileAdmin(app.config['STATIC_DIR'], '/static/', name='Static Files'))
from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_bcrypt import Bcrypt from flask_login import LoginManager from flask_mail import Mail from loginpage.config import Config from flask_admin import Admin db = SQLAlchemy() bcrypt = Bcrypt() login_manager = LoginManager() login_manager.login_view = 'users.login' login_manager.login_message_category = 'info' mail = Mail() # admin = Admin(template_mode='bootstrap3') admin = Admin(name='Dashboard') # user_manager = UserManager() # security = Security() # appbuilder = AppBuilder() def create_app(config_class=Config): app = Flask(__name__) app.config.from_object(Config) from loginpage.models import User, Post, Role, db, MyModelView, MyPostView, MyUserView, MyAdminIndexView db.init_app(app) with app.app_context(): db.create_all() admin.init_app(app, index_view=MyAdminIndexView())
class BaseModelView(ModelView): def on_model_change(self, form, model, is_created): model.generate_slug() return super(BaseModelView, self).on_model_change(form, model, is_created) class AdminView(AdminMixin, ModelView): pass class HomeAdminView(AdminMixin, AdminIndexView): pass class PostAdminView(AdminMixin, BaseModelView): form_columns = ['title', 'body', 'tags'] class TagAdminView(AdminMixin, BaseModelView): form_columns = ['name', 'posts'] admin = Admin(app, 'FlaskApp', url='/', index_view=HomeAdminView(name='Home')) admin.add_view(PostAdminView(Post, db.session)) admin.add_view(TagAdminView(Tag, db.session)) # Flask security user_datastore = SQLAlchemyUserDatastore(db, User, Role) security = Security(app, user_datastore)
return current_user.is_authenticated #跳转 def inaccessible_callback(self, name, **kwargs): return redirect(url_for('security.login', next=request.url)) #后台首页 @expose('/') def index(self): return self.render('admin/index.html') # admin = Admin(name='chahua3287',index_view=MyAdminIndexView()) admin = Admin(name='home',template_mode="bootstrap3", index_view= MyAdminIndexView()) from .user import UserModelView from .shop import ShopModelView admin.add_view(UserModelView(User, db.session, name = u'用户管理')) admin.add_view(ShopModelView(Shop_Info, db.session, name = u'商铺管理')) admin.add_view(ModelView(Role, db.session)) admin.add_view(ModelView(Addr,db.session)) admin.add_view(ModelView(Product_Category,db.session)) admin.add_view(ModelView(Product_info,db.session)) admin.add_view(ModelView(Brand_info,db.session)) admin.add_view(ModelView(Sku_price,db.session)) admin.add_link(AuthenticatedMenuLink(name = 'logout', endpoint='security.logout')) admin.add_view(ModelView(Cart_master,db.session)) admin.add_view(ModelView(Cart_detail,db.session))
from flask_admin import Admin from app.admin.view import MyView, UserAdmin, ArticleAdmin from app.models.auth import User from app.models.article import Article from app.models.base import db admin = Admin(name='后台管理系统', index_view=MyView(name='导航栏'), base_template='admin/my_master.html') admin.add_view(UserAdmin(User, db.session, name='用户信息')) admin.add_view(ArticleAdmin(Article, db.session, name='文章'))
class UserTools(ModelView): """User tools""" can_create = False can_delete = True page_size = 50 column_list = ['email', 'active', 'roles'] form_edit_rules = ['email', 'active', 'roles'] column_searchable_list = ['email'] class VacationTools(ModelView): """Vacation Tools""" can_create = False can_delete = False column_searchable_list = [ User.email, AvaliableVacationDay.avaliable_day, State.name ] admin = Admin(app, name="Vacation Manager", index_view=MyAdminIndexView()) admin.add_link(MenuLink(name='Home Page', url='/', category='Go To')) admin.add_link(MenuLink(name='Logout', url='/logout', category='Go To')) admin.add_view(UserTools(User, db.session)) admin.add_view(VacationTools(UserAvaliableVacationDays, db.session)) user_manager = UserManager(app, db, User) # pylint: disable=wrong-import-position from vacation_manager import routes, models
static_url_path='/static/site', static_folder='qr_hunt/static') app.register_blueprint(blueprint) qrcode = QRcode(app) class Controller(ModelView): def is_accessible(self): return current_user.is_admin def not_auth(self): return "You Are Not Authorized to Use Admin Pannel" admin = Admin(app, name='Control Panel') admin.add_view(Controller(User, db.session)) admin.add_view(Controller(Cluestack, db.session)) admin.add_view(Controller(Clue, db.session)) @login.user_loader def load_user(user_id): return User.query.get(int(user_id)) @app.route('/') @app.route('/home') def home(): # generate urls and display only the once done if current_user.is_authenticated:
column_filters = ['course'] page_size = 25 form_choices = { "status": [('набирается', 'набирается'), ("набрана", "набрана"), ("идет", "идет"), ("в архиве", "в архиве")], "course": [("python", "python"), ("vue", "vue"), ("django", "django"), ("php", "php"), ("html", "html")] } def is_accessible(self): return current_user.is_authenticated class UserView(ModelView): column_exclude_list = ['password'] column_searchable_list = ['name', 'mail'] form_choices = { "role": [('user', 'Пользователь'), ("admin", "Адмнистратор")] } def is_accessible(self): return current_user.is_authenticated admin = Admin(app, template_mode='bootstrap3', index_view=DashboardView()) admin.add_view(UserView(User, db.session)) admin.add_view(GroupView(Group, db.session)) admin.add_view(ApplicantView(Applicant, db.session)) admin.add_view(MailsView(name='Письма', endpoint='mail'))
# views templates folder. Any folder in app.channels can contain templates folders = [] channels_folder = os.path.dirname(os.path.realpath(__file__)) + "/channels" for root, dirs, files in os.walk(channels_folder): for d in dirs: folders.append("%s/%s" % (channels_folder, d)) portal_loader = jinja2.ChoiceLoader([ app.jinja_loader, jinja2.FileSystemLoader(folders), ]) app.jinja_loader = portal_loader from app.controller import DashboardController controller = DashboardController() from app.models import User admin = Admin(app, name='dashboard', template_mode='bootstrap3') admin.add_view(ModelView(User, db.session)) from app.views import DashboardView DashboardView.register(app, route_base='/') @app.before_request def before_request(): controller.before_request()
security = Security(app, user_datastore, confirm_register_form=ExtendedRegisterForm) # register blueprints app.register_blueprint(gateway_blueprint) app.register_blueprint(job_management_blueprint) app.register_blueprint(talent_management_blueprint) # FIXME don't leave this in this state -- here because I want to temporarily disable something in feeds controller... from app_src.feed_module.controllers import feed_blueprint app.register_blueprint(feed_blueprint) # creates the admin panel # FIXME build this elsewhere... admin = Admin(app, name='SHOW ME WHAT YOU GOT! v0.0.1-ALPHA', template_mode='bootstrap3', url="/peekaboo") user_modelview_with_roles = UserView(User, db.session) admin.add_view(user_modelview_with_roles) app_role_modelview = AppRoleView(Role, db.session) admin.add_view(app_role_modelview) job_role_modelview = JobRoleView(OfferingRole, db.session) admin.add_view(job_role_modelview) job_level_modelview = JobLevelView(OfferingLevel, db.session) admin.add_view(job_level_modelview) job_locations_modelview = JobLocationsView(OfferingLocation, db.session) admin.add_view(job_locations_modelview)
from flask import Flask from flask_admin import Admin from flask_admin.contrib.sqla import ModelView from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate from config import Config app = Flask(__name__) app.config.from_object(Config) db = SQLAlchemy(app) migrate = Migrate(app, db) app.config['FLASK_ADMIN_SWATCH'] = 'cerulean' admin = Admin(app, name='homeserver', template_mode='bootstrap3') from src.controllers.bvg import bvg_endpoints from src.controllers.weather import weather_endpoints from src.controllers.gkeep import gkeep_endpoints from src.controllers.cryptocurrencies import crypto_endpoints from src.controllers.home import home_endpoints from src.models.configuration import Configuration from src.models.cryptocurrencies import CryptoWalletConfig, CryptoWalletManualAssets, ETHBlockchainAddresses admin.add_view(ModelView(Configuration, db.session)) admin.add_view(ModelView(CryptoWalletConfig, db.session)) admin.add_view(ModelView(CryptoWalletManualAssets, db.session)) admin.add_view(ModelView(ETHBlockchainAddresses, db.session)) app.register_blueprint(bvg_endpoints) app.register_blueprint(weather_endpoints) app.register_blueprint(gkeep_endpoints) app.register_blueprint(crypto_endpoints)
from flask import redirect, url_for, request from flask_admin import Admin from flask_admin.contrib import sqla from flask.ext.login import current_user admin = Admin(name='jazzband', template_mode='bootstrap3') class JazzbandModelView(sqla.ModelView): def is_accessible(self): if not current_user.is_authenticated: return False return bool(current_user.is_roadie) def inaccessible_callback(self, name, **kwargs): # redirect to login page if user doesn't have access return redirect(url_for('account.login', next=request.url))
full_url, '%s_%s' % (api_name, callback.__name__), self.auth_wrapper(callback, provider), methods=provider.allowed_methods, strict_slashes=False, ) default_auth = AppAuthentication(app_auth=True) data_api = DataRestAPI(app, prefix="/data/api/v0.1", default_auth=default_auth, name="data_api") admin = Admin(app, name="NZ ORCiD Hub", template_mode="bootstrap3", base_template="admin/master.html") SENTRY_DSN = app.config.get("SENTRY_DSN") if SENTRY_DSN: sentry_sdk.init( SENTRY_DSN, integrations=[FlaskIntegration(), RqIntegration(), RedisIntegration()], debug=app.debug, environment=app.config.get("ENV"), attach_stacktrace=True, traces_sample_rate=app.config["SENTRY_TRACES_SAMPLE_RATE"], with_locals=True, send_default_pii=True)
from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_admin import Admin from flask_admin.contrib.sqla import ModelView db = SQLAlchemy() admin = Admin(template_mode='bootstrap3') app = Flask(__name__) app.config['SECRET_KEY'] = '123456790' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db.init_app(app) admin.init_app(app) #################################################################### # model class Post(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(128)) text = db.Column(db.Text) date = db.Column(db.Date) def __str__(self): return "{}".format(self.title) #################################################################### # form
def test_modal_edit(): # bootstrap 2 - test edit_modal app_bs2 = Flask(__name__) admin_bs2 = Admin(app_bs2, template_mode="bootstrap2") edit_modal_on = MockModelView(Model, edit_modal=True, endpoint="edit_modal_on") edit_modal_off = MockModelView(Model, edit_modal=False, endpoint="edit_modal_off") create_modal_on = MockModelView(Model, create_modal=True, endpoint="create_modal_on") create_modal_off = MockModelView(Model, create_modal=False, endpoint="create_modal_off") admin_bs2.add_view(edit_modal_on) admin_bs2.add_view(edit_modal_off) admin_bs2.add_view(create_modal_on) admin_bs2.add_view(create_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 2 - ensure modal window is added when create_modal is enabled rv = client_bs2.get('/admin/create_modal_on/') eq_(rv.status_code, 200) data = rv.data.decode('utf-8') ok_('fa_modal_window' in data) # bootstrap 2 - test create modal disabled rv = client_bs2.get('/admin/create_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) admin_bs3.add_view(create_modal_on) admin_bs3.add_view(create_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) # bootstrap 3 - ensure modal window is added when edit_modal is enabled rv = client_bs3.get('/admin/create_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/create_modal_off/') eq_(rv.status_code, 200) data = rv.data.decode('utf-8') ok_('fa_modal_window' not in data)
#!/usr/bin/env python # encoding: utf-8 import os import time from flask import current_app from flask_admin import Admin from flask_login import LoginManager from flask_mail import Mail from flask_jwt import JWT from flask_redis import FlaskRedis from raven.contrib.flask import Sentry from slackclient import SlackClient from application.services.theme import _reload_template, _get_template_name sc = SlackClient("xoxb-68385490752-9gPeX5F6krKS84C1LO6moByC") jwt = JWT() mail = Mail() admin = Admin() redis = FlaskRedis() login_manager = LoginManager() sentry = Sentry()
def start_api(HOST="0.0.0.0", PORT=None): with app.app_context(): db.init_app(app) db.create_all() # populate the database for i in range(300): secret = hashlib.sha256(bytes(i)).hexdigest() reader = Person(name="Reader " + str(i), email="reader_email" + str(i), password=secret) author = Person(name="Author " + str(i), email="author_email" + str(i)) book = Book(title="book_title" + str(i)) review = Review(reader_id=reader.id, book_id=book.id, review="review " + str(i)) publisher = Publisher(name="name" + str(i)) publisher.books.append(book) reader.books_read.append(book) author.books_written.append(book) for obj in [reader, author, book, publisher, review]: db.session.add(obj) db.session.commit() swagger_host = HOST if PORT and PORT != 80: swagger_host += ":{}".format(PORT) custom_swagger = { "info": { "title": "New Title" }, "securityDefinitions": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "My-ApiKey" } } } # Customized swagger will be merged api = SAFRSAPI( app, host=swagger_host, port=PORT, prefix=OAS_PREFIX, api_spec_url=OAS_PREFIX + "/swagger", custom_swagger=custom_swagger, schemes=["http", "https"], description=description, ) # Flask-Admin Config admin = Admin(app, url="/admin") for model in [Person, Book, Review, Publisher]: # add the flask-admin view admin.add_view(sqla.ModelView(model, db.session)) # Create an API endpoint api.expose_object(model)