Flask-Admin 后台管理
Flask-Admin是一个简单易用的Flask扩展,可以为Flask应用程序增加管理界面。
1、安装扩展
先用pip 安装flask-admin扩展 pip install flask-admin
2、有点不同的是,import时,是import: flask.ext.admin 或者import flask_admin
第一个manage.py,或者helloadmin.py
from flask import Flask
from flask_admin import Admin, BaseView, expose
app = Flask(__name__)
admin = Admin(app,name='后台管理系统')
app.run()
这里把name加上了,会看见一个标题。
运行它 python manage.py, 在浏览器地址栏输入localhost:5000/admin 或者把localhost替换为127.0.0.1,可以看见一个光秃秃的运行界面如上图。
3、加点东西(标签)
现在,创建一个新的index.html
文件并写入如下内容:
{% extends 'admin/master.html' %}
{% block body %}
Hello World from MyView!
{% endblock %}
然后把它放到templates
目录。为维持一致的外观和感觉,所有管理页面应该延伸于admin/master.html
模板。
目录结构是:
manage.py
templates-index.html
再次运行程序,刷新,现在应该看到Hello页面的新的管理页面起作用了。点击这个标签。
4、添加第2级目录
写另一个view,让它也继承BaseView,不过显示的东西不同:
class MyViewCate2(BaseView):
#这里类似于app.route(),处理url请求
@expose('/')
def index(self):
return self.render('index2.html')
index2.html如下:
{% extends 'admin/master.html' %}
#为了保持一致,继承adminmaster.html模板
{% block body %}
欢迎来到第2层
{% endblock %}
OK,现在再加入这个层级的view:
admin.add_view(MyViewCate2(name='Hello 1', endpoint='test1', category='Test'))
admin.add_view(MyViewCate2(name='Hello 2', endpoint='test2', category='Test'))
admin.add_view(MyViewCate2(name='Hello 3', endpoint='test3', category='Test'))
重新运行,刷新,应该看到:
我们就先完成了一个添加目录、标签的网页,好快啊是不是?可以通过http://127.0.0.1:5000/admin/test1 访问它。全部代码如下:
from flask import Flask
from flask.ext.admin import Admin, BaseView, expose
#from flask_admin import Admin, BaseView, expose
class MyView(BaseView):
#这里类似于app.route(),处理url请求
@expose('/')
def index(self):
return self.render('index.html')
class MyViewCate2(BaseView):
#这里类似于app.route(),处理url请求
@expose('/')
def index(self):
return self.render('index2.html')
app = Flask(__name__)
admin = Admin(app,name="后台管理系统")
# Add administrative views here
admin.add_view(MyView(name='Hello'))
admin.add_view(MyViewCate2(name='Hello 1', endpoint='test1', category='Test'))
admin.add_view(MyViewCate2(name='Hello 2', endpoint='test2', category='Test'))
admin.add_view(MyViewCate2(name='Hello 3', endpoint='test3', category='Test'))
app.run()