Flask學習記錄之Flask-Admin


相信用過Django框架的都不會忘記它強大的Admin功能,Flask-admin是一款能夠與Django Admin所媲美的擴展,能夠快速創建Web管理界面,實現了用戶、文件增刪改查等常用功能;也可以通過修改模板文件來定制管理頁面.

初始化:

from flask import Flask
from flask_admin import Admin

app = Flask(__name__)

admin = Admin(app)
# Add administrative views here
#也可以指定name屬性來命名admin = Admin(app, name='Super Administrator')
app.run()

 

Flask-admin將后台的每一個菜單選項看作一個View對象,View對象要通過flask-admin實例對象注冊后才能顯示

from flask_admin import Admin, BaseView, expose

#繼承一個BaseView定義一項管理菜單
class MyView(BaseView):
    #127.0.0.1:5000/admin/
    @expose('/')
    def index(self):
        return self.render('index.html')

#添加一個Hello菜單,這個視圖可以在外部通過url_for('myview.index')生成url
admin.add_view(MyView(name='Hello'))
#添加一個在Test標簽下添加一個Hello 1菜單,路由為test1 #這個視圖在外部通過url_for('test1.index')生成url admin.add_view(MyView(name='Hello 1', endpoint='test1', category='Test')) admin.add_view(MyView(name='Hello 2', endpoint='test2', category='Test')) admin.add_view(MyView(name='Hello 3', endpoint='test3', category='Test'))

 

效果如圖:

安全

flask-admin不提供后台的安全認證,默認情況下,管理界面是完全公開的,不過你可以自己實現認證的邏輯,或者使用flask-login提供的.在定義View時覆蓋父類的is_accessible()方法 ,返回False則禁止訪問

class MyView(BaseView):
    def is_accessible(self):
        return login.current_user.is_authenticated()

模型

flask-admin可以通過創建ModelView類實例實現模型的管理

from flask.ext.admin.contrib.sqla import ModelView
from .models import User

# Flask and Flask-SQLAlchemy initialization here

admin = Admin(app)
admin.add_view(ModelView(User, db.session))

可以通過繼承ModelView來定制模型管理內容

from flask_admin.contrib.sqla import ModelView

# Flask and Flask-SQLAlchemy initialization here

class MyView(ModelView):
    # 是否允許創建
    can_create = False

    # 顯示的字段
    column_list = ('login', 'email')

    def __init__(self, session, **kwargs):
        # You can pass name and other parameters if you want to
        super(MyView, self).__init__(User, session, **kwargs)

admin = Admin(app)
admin.add_view(MyView(db.session))

1.指定可搜索的字段:

column_searchable_list = ('name', 'email') 或者column_searchable_list = (User.name, User.email)

2.指定過濾器:

 column_filters = ('user', 'email') 或者 
column_filters = (BooleanEqualFilter(User.name, 'Name'))

3.設置內聯對象:

 時創建或修改時可以同時創建內聯對象,內聯對象必須是與這個對象建立了關系的.如圖,創建新用戶時可以同時創建他的文章,如圖


(1)inline_models = (Article,) 直接創建

(2)inline_models = [(Article, dict(form_columns=['title']))]指定內聯對象顯示的字段,這里只顯示title

(3)Django方式創建內聯對象:

class MyInlineModelForm(InlineFormAdmin):
    form_columns = ('title', 'date')

class MyModelView(ModelView):
    inline_models = (MyInlineModelForm(MyInlineModel),)

 

文件管理

from flask.ext.admin.contrib.fileadmin import FileAdmin

import os.path as op

# Flask setup here

admin = Admin(app)

path = op.join(op.dirname(__file__), 'static')
admin.add_view(FileAdmin(path, '/static/', name='Static Files'))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM