#!/usr/bin/env python # -*- coding: utf-8 -*- # ************************************************************************** # Copyright © 2019 jianglin # File Name: admin.py # Author: jianglin # Email: mail@honmaple.com # Created: 2017-03-12 20:18:22 (CST) # Last Update: Wednesday 2019-01-09 14:20:18 (CST) # By: # Description: # ************************************************************************** from random import randint from time import time from flask import Markup, abort, current_app from flask_admin import Admin, form from flask_admin.contrib.sqla import ModelView from flask_login import current_user from storage.util import gen_hash from storage.extension import db from storage.server.model import Album, Image from storage.auth.model import User admin = Admin(name='图片管理', template_mode='bootstrap3') class BaseView(ModelView): page_size = 10 can_view_details = True # column_display_pk = True # form_base_class = BaseForm def is_accessible(self): if current_user.is_authenticated and current_user.is_superuser: return True return False def inaccessible_callback(self, name, **kwargs): abort(404) class UserView(BaseView): column_exclude_list = ['password'] column_editable_list = ['is_superuser'] def on_model_change(self, form, model, is_created=False): if is_created: model.key = model.api_key model.password = User.set_password(form.password.data) class AlbumView(BaseView): column_editable_list = ['name'] class ImageView(BaseView): def _list_thumbnail(view, context, model, name): return Markup('<img src="/%s">' % model.url.replace('photo', 'thumb')) def prefix_name(obj, file_data): name = '{name}.png'.format( name=str(int(time() * 1000)) + str(randint(10, 99))) return name column_formatters = {'url': _list_thumbnail} column_exclude_list = ['hash', 'path'] form_excluded_columns = ['hash', 'path'] form_extra_fields = { 'url': form.ImageUploadField( 'Image', base_path=lambda: current_app.config['UPLOAD_FOLDER'], namegen=prefix_name, thumbnail_size=(100, 100, True)) } def on_model_change(self, form, model, is_created=False): if is_created: model.hash = gen_hash(form.url.data) def init_app(app): admin.add_view( UserView( User, db.session, name='管理用户', endpoint='admin_user', url='users')) admin.add_view( AlbumView( Album, db.session, name='管理相册', endpoint='admin_album', url='albums')) admin.add_view( ImageView( Image, db.session, name='管理图片', endpoint='admin_image', url='images')) admin.index_view.url = app.config['ADMIN_URL'] admin.init_app(app)