个人技术总结——Flask-Admin扩展
Posted imclaudia
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了个人技术总结——Flask-Admin扩展相关的知识,希望对你有一定的参考价值。
一、技术概述
Flask-Admin是一个功能齐全、简单易用的Flask扩展,可以为Flask应用程序增加管理界面。用这样一种方式实现管理后台,开发者拥有应用程序的外观和功能的全部控制权。
二、技术详述
这个库使用一个简单而强大的概念——管理部件,是用视图方法构建的类:
class MyView(BaseView):
@expose(‘/‘)
def index(self):
return self.render(‘admin/myindex.html‘)
@expose(‘/test/‘)
def test(self):
return self.render(‘admin/test.html‘)
如果用户访问index
视图,模板文件admin/myindex.html
会被渲染。同样的,访问test
视图的结果是admin/test.html
被渲染。
- 初始化
要开始使用Flask-Admin,需要创建一个Admin
类实例并和Flask应用程序实例关联。
from flask import Flask
from flask.ext.admin import Admin
app = Flask(__name__)
admin = Admin(app)
# Add administrative views here
app.run()
- 增加视图
增加一个衍生于BaseView
类的管理视图:
from flask import Flask
from flask.ext.admin import Admin, BaseView, expose
class MyView(BaseView):
@expose(‘/‘)
def index(self):
return self.render(‘index.html‘)
app = Flask(__name__)
admin = Admin(app)
admin.add_view(MyView(name=‘Hello‘))
app.run()
- 身份验证
Flask-Admin默认管理界面是完全开放的,要控制使用管理界面,可以指定is_accessible
方法:
class MyView(BaseView):
def is_accessible(self):
return login.current_user.is_authenticated()
- 生成URL
在内部,视图类工作于Flask蓝图的顶部,因此可以使用url_for
附带一个.
前缀来获得局部视图的URL:
from flask import url_for
class MyView(BaseView):
@expose(‘/‘)
def index(self)
# Get URL for the test view method
url = url_for(‘.test‘)
return self.render(‘index.html‘, url=url)
@expose(‘/test/‘)
def test(self):
return self.render(‘test.html‘)
- 模型视图
模型视图允许你为数据库中的每个模型增加专用的管理页面。通过创建ModelView
类实例来实现,ModelView
类可从Flask-Admin内置的ORM后端引入。一个SQLAlchemy后端的例子:
from flask.ext.admin.contrib.sqla import ModelView
# Flask and Flask-SQLAlchemy initialization here
admin = Admin(app)
admin.add_view(ModelView(User, db.session))
三、技术使用中遇到的问题和解决过程
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
四、总结
合理应用Flask Admin,可以用极少量的代码,快速构建小型WEB应用。
五、参考文献
以上是关于个人技术总结——Flask-Admin扩展的主要内容,如果未能解决你的问题,请参考以下文章