概述
在使用Flask-Admin开发后台应用的时候,会遇到Flask-admin的一些坑,这篇是记录这些坑并且如何灵巧的避开。
坑一:无法下载CSS(大文件)
我在把Flask部署到内网上的Linux服务器后,在苹果电脑上打开Falsk-Admin的后台应用,会发现有时候没有CSS样式表,而且有时候JS也没有下载下来,用浏览器调试时发现有关文件报了「」错误,我估计是因为文件太大(大约80KB)导致文件下载不下来。解决办法是把那些文件改用CDN,下面是一个避开此坑的方法:
创建my_base_view.html文件,改写Flask-Admin默认的base.html模板。
{# 继承base.html #}
{% extends 'admin/base.html' %}
{# 改写head_css #}
{% block head_css %}
{# <link href="{{ admin_static.url(filename='bootstrap/bootstrap2/css/bootstrap.css', v='2.3.2', _external=True) }}" rel="stylesheet"> #}
<link href="http://cdn.bootcss.com/bootstrap/2.3.2/css/bootstrap.css" rel="stylesheet">
{# <link href="{{ admin_static.url(filename='bootstrap/bootstrap2/css/bootstrap-responsive.css', v='2.3.2', _external=True) }}" rel="stylesheet"> #}
<link href="http://cdn.bootcss.com/bootstrap/2.3.2/css/bootstrap-responsive.css" rel="stylesheet">
<link href="{{ admin_static.url(filename='admin/css/bootstrap2/admin.css', v='1.1.1', _external=True) }}" rel="stylesheet">
<style>
body {
padding-top: 4px;
}
</style>
{% endblock %}
{# 改写tail_js #}
{% block tail_js %}
{# <script src="{{ admin_static.url(filename='vendor/jquery.min.js', v='2.1.4', _external=True) }}" type="text/javascript"></script> #}
<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
{# <script src="{{ admin_static.url(filename='bootstrap/bootstrap2/js/bootstrap.min.js', v='2.3.2', _external=True) }}" type="text/javascript"></script> #}
<script src="http://cdn.bootcss.com/bootstrap/2.3.2/js/bootstrap.min.js"></script>
<script src="{{ admin_static.url(filename='vendor/moment.min.js', v='2.9.0', _external=True) }}" type="text/javascript"></script>
<script src="{{ admin_static.url(filename='vendor/select2/select2.min.js', v='3.5.2', _external=True) }}" type="text/javascript"></script>
{% endblock %}
之后设置admin的base_template
参数为该模板即可。
from flask_admin import Admin
admin = Admin(name=u'应用名称',
base_template='my_base_view.html')
在Flask-Admin的视图页面中要显示大图片,但几乎下载不下来,也是这个原因。目前的办法是只能压缩图片,尽量小于80KB。
坑二:初始化视图不能放在create_app
里
Flask-Admin有add_view
视图函数,给admin添加视图的时候,不能放在create_app
里。虽然运行没有报错,但是在单元测试的时候会出现蓝本重复注册,正确的方法是在create_app
外面调用add_view
。
# 代码示例
admin = Admin(name=u'应用名称')
# 正确做法
admin.add_view(ModelView(name='板块', category='标签'))
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)
admin.init_app(app)
# 不好的做法
#admin.add_view(ModelView(name='板块', category='标签'))
return app