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()