22
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Flask-Admin vs. DIY Dokenzy 2013. 7. 30

Flask admin vs. DIY

  • Upload
    dokenzy

  • View
    3.406

  • Download
    2

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Flask admin vs. DIY

..........

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

......

.....

.....

.

Flask-Admin vs. DIYDokenzy

2013. 7. 30

Page 2: Flask admin vs. DIY

..........

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

......

.....

.....

.

경고

저는 flask-admin를 안써요.

Page 3: Flask admin vs. DIY

..........

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

......

.....

.....

.

준비

$ pythonbrew use 2.7.3$ pythonbrew venv create fladmin$ pythonbrew venv use fladmin

Page 4: Flask admin vs. DIY

..........

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

......

.....

.....

.

설치

▶ Flask▶ Flask-Admin▶ SQLAlchemy▶ Flask-SQLAlchemy▶ WTForms▶ Flask-WTForms

Page 5: Flask admin vs. DIY

..........

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

......

.....

.....

.

시작하기 전에…

▶ http://flask-admin.readthedocs.org/en/latest/▶ I attempted to make it as flexible as possible.▶ Administrative pieces are built as classes with view

methods.

Page 6: Flask admin vs. DIY

..........

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

......

.....

.....

.

시작

1 from flask import Flask2 from flask.ext.admin import Admin34 app = Flask(__name__)56 admin = Admin(app)7 # admin = Admin(app, name=’Admin page Title’)89 # admin = Admin(name=’Admin page Title’)

10 # admin.init_app(app)1112 app.run()

Page 7: Flask admin vs. DIY

..........

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

......

.....

.....

.

View

▶ BaseView▶ ModelView

Page 8: Flask admin vs. DIY

..........

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

......

.....

.....

.

BaseView

1 from flask.ext.admin import Admin, BaseView, expose23 class System(BaseView):4 @expose('/')5 def index(self):6 return self.render(os.path.join('admin', 'system.html'))7 @expose('/settings/')8 def settings(self):9 return self.render(os.path.join('admin', 'settings.html'))

10 @expose('/contacts/')11 def contacts(self):12 return self.render(os.path.join('admin', 'contacts.html'))1314 admin.add_view(System(name='settings', endpoint='settings', category='Setting'))15 admin.add_view(System(name='contacts', endpoint='contacts', category='Setting'))16 admin.add_view(System(name='system', endpoint='sos', category='Setting'))

Page 9: Flask admin vs. DIY

..........

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

......

.....

.....

.

BaseView

▶ @expose('/')

필수

▶ @expose(url, methods)▶ lowercased 클래스 이름이 기본 endpoint▶ 여러 개의 메소드가 있어도 항상 ‘/’만 호출된다.

http://stackoverflow.com/questions/15699303/setting-up-admin-views-with-flask-admin-module.

Page 10: Flask admin vs. DIY

..........

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

......

.....

.....

.

ModelView

1 from flask.ext.admin.contrib.sqlamodel import ModelView2 admin = Admin(app)3 admin.add_view(ModelView(User, db.session))

Page 11: Flask admin vs. DIY

..........

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

......

.....

.....

.

ModelView

▶ SQLAlchemy, MongoEngine, Peewee, PyMongo▶ Override(properties, methods)

▶ column_filters = None▶ column_searchable_list = ('name', 'email')▶ create_view

Page 12: Flask admin vs. DIY

..........

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

......

.....

.....

.

Temlates

상속

▶ {% extends 'admin/master.html' %}

Flask Core▶ head_meta, title, head_css, head, …

Models▶ model_menu_bar, model_list_table, …

Page 13: Flask admin vs. DIY

..........

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

......

.....

.....

.

Authentication

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

Page 14: Flask admin vs. DIY

..........

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

......

.....

.....

.

Examples

https://github.com/mrjoes/flask-admin/blob/master/examples/

Page 15: Flask admin vs. DIY

..........

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

......

.....

.....

.

Run오류 발생

Failed to create model. __init__() takes exactly 2 arguments (1 given)

Failed to create model. __init__() takes exactly 3 arguments (1 given)

Failed to create model. __init__() takes exactly 4 arguments (1 given)

Failed to create model. __init__() takes exactly 5 arguments (1 given)

Failed to create model. __init__() takes exactly 6 arguments (1 given)

Page 16: Flask admin vs. DIY

..........

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

......

.....

.....

.

Page 17: Flask admin vs. DIY

..........

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

......

.....

.....

.

Run해결방법

1. 모델 클래스의 __init__() 수정2. flask-admin을 패치

Page 18: Flask admin vs. DIY

..........

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

......

.....

.....

.

Flask-Admin 패치Source

1 try:2 model = self.model()

Page 19: Flask admin vs. DIY

..........

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

......

.....

.....

.

Flask-Admin 패치Patch

/site-packages/flask_admin/contrib/sqlamodel/view.py1 values = {}2 for k in form.data.iterkeys():3 try:4 value = unicode(form.data[k])5 except:6 value = form.data[k]7 values[k] = value8

9 try:10 model = self.model(**values)

Page 20: Flask admin vs. DIY

..........

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

......

.....

.....

.

그래도 저는 안씁니다.

▶ 커스터마이징이 많아지면 extension을 쓰는 이유가 없어진다.▶ 매니저 등급 구분 기능이 없다.

▶ 관리자 메뉴에서 편집한 내용이 원래 레코드에 반영이 안된다.

어쩌라고…?

Page 21: Flask admin vs. DIY

..........

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

......

.....

.....

.

Do it yourself

▶ ORM을 쓰면 할만하다.▶ DB 모델을 싹 갈아치울 일은 거의 없다.▶ 관리자 UI는 유행이나 이벤트로부터 자유롭다.

Page 22: Flask admin vs. DIY

..........

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

.....

.....

......

.....

......

.....

.....

.

Demo