def main(): from flask.ext import databrowser from flask import Blueprint from basemain import app, db from models import User accounts_bp = Blueprint("accounts", __name__, static_folder="static", template_folder="templates") browser = databrowser.DataBrowser(app, db) class UserModelView(databrowser.ModelView): __list_columns__ = ["id", "name", "group", "password"] __list_formatters__ = { "create_time": lambda model, v: v.strftime("%Y-%m-%d %H") + u"点", "group": lambda model, v: v.name, } __column_docs__ = {"password": u"md5值"} __sortable_columns__ = ["id", "name"] __column_labels__ = {"name": u"姓名", "create_time": u"创建于", "group": u"用户组"} from flask.ext.databrowser import filters from datetime import datetime, timedelta today = datetime.today() yesterday = today.date() week_ago = (today - timedelta(days=7)).date() _30days_ago = (today - timedelta(days=30)).date() __column_filters__ = [ filters.EqualTo("group", name=u"是", opt_formatter=lambda opt: opt.name), filters.BiggerThan( "create_time", name=u"在", options=[(yesterday, u"一天内"), (week_ago, u"一周内"), (_30days_ago, u"30天内")] ), filters.EqualTo("name", name=u"是"), ] browser.register_model_view(UserModelView(User), accounts_bp) app.register_blueprint(accounts_bp, url_prefix="/accounts") app.config["SECRET_KEY"] = "JHdkj1;" app.config["CSRF_ENABLED"] = False app.run(debug=True)
def main(): from flask.ext import report from flask import Blueprint report_page = Blueprint("report", __name__, static_folder="static", template_folder="templates") d = dict(MAIL_SERVER='smtp.163.com', MAIL_PORT=25, MAIL_USE_TLS=False, MAIL_USE_SSL=False, MAIL_USERNAME='******', MAIL_PASSWORD='******') for k, v in d.items(): app.config[k] = v report.FlaskReport(app, db, utils.collect_models(models), report_page, table_label_map={'TB_USER': u'角色'}) app.register_blueprint(report_page, url_prefix="/report") app.run(debug=True, port=5001, host="0.0.0.0")
from basemain import app app.run()
sys.exit(1) elif o == '-p': port = int(v) elif o == '-s': host = v elif o == '-c': conf_dir = v else: print 'unknown option: ' + o print __doc__ sys.exit(1) try: port host except NameError: port = 5000 host = '0.0.0.0' try: app.config['REPORT_CONFIG_DIR'] = conf_dir except NameError: pass from flask.ext import report import models report.FlaskReport(app, db, report.utils.collect_models(models)) app.run(debug=True, port=port, host=host)
def main(): from basemain import app, db from flask.ext.principal import Principal login_manager = LoginManager() login_manager.setup_app(app) principal = Principal(app) @app.route("/favicon.ico") def favicon(): return "" @login_manager.user_loader def load_user(userid): return User.get(userid) from flask.ext import databrowser from flask.ext.databrowser.action import DeleteAction, RedirectAction from models import User, Car, Group accounts_bp = Blueprint("accounts", __name__, static_folder="static", template_folder="templates") browser = databrowser.DataBrowser(app) from flask.ext.databrowser.error_handle import ErrorHandler error_handler = ErrorHandler(browser) if not app.config["DEBUG"]: app.errorhandler(Exception)(error_handler) app.errorhandler(404)(error_handler) class UserModelView(databrowser.ModelView): column_hide_backrefs = False list_template = "accounts/list.html" edit_template = create_template = "accounts/form.html" #can_batchly_edit = False on_fly = False def expand_model(self, obj): class _Proxy(object): def __init__(self, obj): self.obj = obj self.foo = 1 @property def pic_url(self): if self.pic_path: return url_for("serv_pic", filename=self.pic_path) else: return "" def __getattr__(self, attr): return getattr(self.obj, attr) return _Proxy(obj) def repr_obj(self, obj): return obj.name def patch_row_css(self, idx, row): if row.roll_called == 1: return "box warning" #def try_edit(self, objs): #raise PermissionDenied() def get_create_help(self): return "<h3>this is create view</h3>" def get_edit_help(self, objs): return "<h3>this is edit view</h3>" def get_list_help(self): return "<h3>this is list view</h3>" @property def list_columns(self): return ["id", "name", "group", "password", "roll_called", "group.name", "create_time", "good"] #return ["id", "name", "group", "password", "roll_called", "group.name", #"create_time", #ImageColumnSpec("avatar", alt=u"头像", #formatter=lambda v, #model: "http://farm9.staticflickr" #".com/8522/8478415115_152c6f5e55_m.jpg", #doc=u"头像,^_^!"), "good"] @databrowser.ModelView.cached @property def create_columns(self): ret = OrderedDict() ret["primary"] = ["name", "group", "password"] ret["secondary"] = [ InputHtmlSnippetColSpec("age", template="/accounts/age-snippet.html"), "roll_called", "birthday", "create_time", "car_list"] return ret @property def edit_columns(self, obj=None): ret = OrderedDict() ret[u"主要的"] = [ InputColSpec("id", disabled=True), InputColSpec("name", disabled=True), 'group', #HtmlSnippetColSpec("group", #template="/accounts/group-snippet.html", #render_kwargs={ #'form_width_class': "col-lg-3"}), "password", HtmlSnippetColSpec("foo", template="/accounts/foo-snippet.html")] ret[u"次要的"] = [ "roll_called", "good", HtmlSnippetColSpec("age", template="/accounts/age-snippet.html"), "create_time", #ImageColumnSpec("avatar", alt=u"头像", #formatter=lambda v, #model: "http://farm9.staticflickr" #".com/8522/8478415115_152c6f5e55_m.jpg", #doc=u"头像, ^_^!") ] #ret[u"额外的"] = [ #TableColumnSpec("dogs", css_class="table table-striped table-hover table-condensed table-bordered"), #InputColumnSpec("car_list", css_class="alert alert-info", group_by=lambda x: x.model[0], #disabled=False), ## "car_list" #] #ret[u"头像"] = [ #ImageColumnSpec("pic_url", label=u"头像"), #FileColumnSpec("pic_path", label=u"上传") #] return ret @property def batch_edit_columns(self): ret = OrderedDict() ret["primary"] = ["name", InputColSpec("group", label=u'用户组')] ret["secondary"] = ["age", "roll_called"] return ret column_formatters = { "create_time": lambda v, model: v.strftime("%Y-%m-%d %H") + u"点", "avatar": lambda v, model: "http://farm9.staticflickr.com/8522/8478415115_152c6f5e55_m.jpg", "group": lambda v, model: v.name if v else "", } column_docs = { "password": u"md5值", "roll_called": u"点名过", } #__sortable_columns__ = ["id", "name", "group"] @property def default_order(self): return ("name", "desc") @property def filters(self): from datetime import datetime, timedelta today = datetime.today() yesterday = today.date() week_ago = (today - timedelta(days=7)).date() _30days_ago = (today - timedelta(days=30)).date() return [ filters.In_("group", self, name=u"是", opt_formatter=lambda opt: opt.name), filters.BiggerThan("create_time", self, name=u"在", options=[(yesterday, u'一天内'), (week_ago, u'一周内'), (_30days_ago, u'30天内')], default_value=str(_30days_ago)), filters.EqualTo("name", self, name=u"是"), filters.Contains("name", self, name=u"包含"), filters.Only("roll_called", self, label=u"仅展示点名", test=lambda col: col is True, notation="__roll_called", default_value=False), filters.Between("create_time", self) ] #def __list_filters__(self): #return [filters.NotEqualTo("name", value=u"Type")] def patch_row_attr(self, idx, row): if row.name == "Tyde": return {"title": u"测试"} def get_actions(self, processed_objs=None): class MyDeleteAction(DeleteAction): def test_enabled(self, model): if model.name == "Spock": return -3 elif model.name == "Tyde": return -2 return 0 def get_forbidden_msg_formats(self): return {-3: "[%s]是我的偶像, 不要删除他们", -2: "[%s]是好狗,不要伤害他们"} class RollCall(BaseAction): def op(self, model): model.roll_call() def test_enabled(self, model): if model.roll_called: return -1 return 0 #def try_(self): #roll_call_perm.test() class _ReadOnlyAction(RedirectAction): def op_upon_list(self, model, model_view): return redirect("http://www.u148.com") return [ MyDeleteAction(u"删除", data_icon="fa fa-times"), RollCall(u"点名", warn_msg=u"点名后就是弱智!"), RollCall(u"点名", warn_msg=u"点名后就是弱智!"), RollCall(u"点名", warn_msg=u"点名后就是弱智!"), RollCall(u"点名", warn_msg=u"点名后就是弱智!"), RollCall(u"点名", warn_msg=u"点名后就是弱智!"), RollCall(u"点名", warn_msg=u"点名后就是弱智!"), RollCall(u"点名", warn_msg=u"点名后就是弱智!"), _ReadOnlyAction(u"打酱油的") ] def try_view(self, processed_objs=None): pass def try_create(self): pass user_model_view = UserModelView(SAModell(User, db, u"用户")) browser.register_model_view(user_model_view, accounts_bp, extra_params={"form_view": {"age_hint": "modify your age here"}, "create_view": {"age_hint": "input your age here"}}) class CarModelView(databrowser.ModelView): __form_columns__ = ["id", "model"] class GroupModelView(databrowser.ModelView): def try_create(self): pass browser.register_model_view(CarModelView(SAModell(Car, db, u"汽车")), accounts_bp, extra_params={"form_view": {"company": "xc"}}) browser.register_model_view(GroupModelView(SAModell(Group, db, u"")), accounts_bp) app.register_blueprint(accounts_bp, url_prefix="/accounts") @app.route("/") def index(): return redirect(user_model_view.url_for_list()) @app.route("/serv-pic/<filename>") def serv_pic(filename): return send_from_directory(app.config['UPLOAD_FOLDER'], filename) app.config["SECRET_KEY"] = "JHdkj1;" app.config["CSRF_ENABLED"] = False app.config["UPLOAD_FOLDER"] = r"e:\uploads" app.run(debug=True, port=5001, host="0.0.0.0")
from basemain import app, db db.open() db.reindex() app.run()
# -*- coding:utf-8 -*- if __name__ == "__main__": from basemain import app host = "0.0.0.0" port = None app.run(host=host, port=port)