SlideShare a Scribd company logo
1 of 22
Download to read offline
.....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
.....
.
....
.
....
.
Flask-Admin vs. DIY
Dokenzy
2013. 7. 30
.....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
.....
.
....
.
....
.
경고
저는 flask-admin를 안써요.
.....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
.....
.
....
.
....
.
준비
$ pythonbrew use 2.7.3
$ pythonbrew venv create fladmin
$ pythonbrew venv use fladmin
.....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
.....
.
....
.
....
.
설치
▶ Flask
▶ Flask-Admin
▶ SQLAlchemy
▶ Flask-SQLAlchemy
▶ WTForms
▶ Flask-WTForms
.....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
.....
.
....
.
....
.
시작하기 전에…
▶ 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.
.....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
.....
.
....
.
....
.
시작
1 from flask import Flask
2 from flask.ext.admin import Admin
3
4 app = Flask(__name__)
5
6 admin = Admin(app)
7 # admin = Admin(app, name=’Admin page Title’)
8
9 # admin = Admin(name=’Admin page Title’)
10 # admin.init_app(app)
11
12 app.run()
.....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
.....
.
....
.
....
.
View
▶ BaseView
▶ ModelView
.....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
.....
.
....
.
....
.
BaseView
1 from flask.ext.admin import Admin, BaseView, expose
2
3 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'))
13
14 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'))
.....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
.....
.
....
.
....
.
BaseView
▶ @expose('/')
필수
▶ @expose(url, methods)
▶ lowercased 클래스 이름이 기본 endpoint
▶ 여러 개의 메소드가 있어도 항상 ‘/’만 호출된다.
http://stackoverflow.com/questions/15699303/
setting-up-admin-views-with-flask-admin-module.
.....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
.....
.
....
.
....
.
ModelView
1 from flask.ext.admin.contrib.sqlamodel import ModelView
2 admin = Admin(app)
3 admin.add_view(ModelView(User, db.session))
.....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
.....
.
....
.
....
.
ModelView
▶ SQLAlchemy, MongoEngine, Peewee, PyMongo
▶ Override(properties, methods)
▶ column_filters = None
▶ column_searchable_list = ('name', 'email')
▶ create_view
.....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
.....
.
....
.
....
.
Temlates
상속
▶ {% extends 'admin/master.html' %}
Flask Core
▶ head_meta, title, head_css, head, …
Models
▶ model_menu_bar, model_list_table, …
.....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
.....
.
....
.
....
.
Authentication
1 class MyView(BaseView):
2 def is_accessible(self):
3 return login.current_user.is_authenticated()
.....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
.....
.
....
.
....
.
Examples
https://github.com/mrjoes/flask-admin/blob/master/examples/
.....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
.....
.
....
.
....
.
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)
.....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
.....
.
....
.
....
.
.....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
.....
.
....
.
....
.
Run
해결방법
1. 모델 클래스의 __init__() 수정
2. flask-admin을 패치
.....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
.....
.
....
.
....
.
Flask-Admin 패치
Source
1 try:
2 model = self.model()
.....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
.....
.
....
.
....
.
Flask-Admin 패치
Patch
/site-packages/flask_admin/contrib/sqlamodel/view.py
1 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] = value
8
9 try:
10 model = self.model(**values)
.....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
.....
.
....
.
....
.
그래도 저는 안씁니다.
▶ 커스터마이징이 많아지면 extension을 쓰는 이유가 없어진다.
▶ 매니저 등급 구분 기능이 없다.
▶ 관리자 메뉴에서 편집한 내용이 원래 레코드에 반영이 안된다.
어쩌라고…?
.....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
.....
.
....
.
....
.
Do it yourself
▶ ORM을 쓰면 할만하다.
▶ DB 모델을 싹 갈아치울 일은 거의 없다.
▶ 관리자 UI는 유행이나 이벤트로부터 자유롭다.
.....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
....
.
....
.
.....
.
....
.
.....
.
....
.
....
.
끝
Demo

More Related Content

What's hot

Grelha 05-visualizador gráfico de grelhas
Grelha 05-visualizador gráfico de grelhasGrelha 05-visualizador gráfico de grelhas
Grelha 05-visualizador gráfico de grelhasAnderson Ricardo Cunha
 
Crioscópio PZLl – 7000 v.3.00 manual de operação pzl-7000 ip - rev. 2.0
Crioscópio   PZLl – 7000 v.3.00 manual de operação pzl-7000 ip - rev. 2.0Crioscópio   PZLl – 7000 v.3.00 manual de operação pzl-7000 ip - rev. 2.0
Crioscópio PZLl – 7000 v.3.00 manual de operação pzl-7000 ip - rev. 2.0PZL Tecnologia
 
Apostila solid works 2010
Apostila solid works 2010Apostila solid works 2010
Apostila solid works 2010Edgar Gonzalez
 
Codigos para uma vida extraordinaria
Codigos para uma vida   extraordinariaCodigos para uma vida   extraordinaria
Codigos para uma vida extraordinariaFlávio Barros
 
Manual motoreskcel
Manual motoreskcelManual motoreskcel
Manual motoreskcelBeto Linck
 
Caderno de exercícios Sistemas digitais - Portas lógicas
Caderno de exercícios  Sistemas digitais - Portas lógicasCaderno de exercícios  Sistemas digitais - Portas lógicas
Caderno de exercícios Sistemas digitais - Portas lógicasCarlos Pereira
 
Apostila solidworks impressa
Apostila solidworks impressaApostila solidworks impressa
Apostila solidworks impressaaraujolincoln
 
Individuais 02-tqs preo - projeto de estruturas pre-moldadas
Individuais 02-tqs preo - projeto de estruturas pre-moldadasIndividuais 02-tqs preo - projeto de estruturas pre-moldadas
Individuais 02-tqs preo - projeto de estruturas pre-moldadasAnderson Ricardo Cunha
 
Lajes 03-editor de esforços e armaduras
Lajes 03-editor de esforços e armadurasLajes 03-editor de esforços e armaduras
Lajes 03-editor de esforços e armadurasAnderson Ricardo Cunha
 

What's hot (20)

Grelha 05-visualizador gráfico de grelhas
Grelha 05-visualizador gráfico de grelhasGrelha 05-visualizador gráfico de grelhas
Grelha 05-visualizador gráfico de grelhas
 
Crioscópio PZLl – 7000 v.3.00 manual de operação pzl-7000 ip - rev. 2.0
Crioscópio   PZLl – 7000 v.3.00 manual de operação pzl-7000 ip - rev. 2.0Crioscópio   PZLl – 7000 v.3.00 manual de operação pzl-7000 ip - rev. 2.0
Crioscópio PZLl – 7000 v.3.00 manual de operação pzl-7000 ip - rev. 2.0
 
Apostila solid works 2010
Apostila solid works 2010Apostila solid works 2010
Apostila solid works 2010
 
Aspnet mvc
Aspnet mvcAspnet mvc
Aspnet mvc
 
Access avançado
Access avançadoAccess avançado
Access avançado
 
Grelha 01-comandos e funções
Grelha 01-comandos e funçõesGrelha 01-comandos e funções
Grelha 01-comandos e funções
 
Codigos para uma vida extraordinaria
Codigos para uma vida   extraordinariaCodigos para uma vida   extraordinaria
Codigos para uma vida extraordinaria
 
Pórtico 01-pórtico tqs
Pórtico 01-pórtico tqsPórtico 01-pórtico tqs
Pórtico 01-pórtico tqs
 
Vigas 02-edição de dados
Vigas 02-edição de dadosVigas 02-edição de dados
Vigas 02-edição de dados
 
Grelha 06-elementos finitos de placas
Grelha 06-elementos finitos de placasGrelha 06-elementos finitos de placas
Grelha 06-elementos finitos de placas
 
Manual motoreskcel
Manual motoreskcelManual motoreskcel
Manual motoreskcel
 
Caderno de exercícios Sistemas digitais - Portas lógicas
Caderno de exercícios  Sistemas digitais - Portas lógicasCaderno de exercícios  Sistemas digitais - Portas lógicas
Caderno de exercícios Sistemas digitais - Portas lógicas
 
Apostila geo gebra
Apostila geo gebraApostila geo gebra
Apostila geo gebra
 
Individuais 01-lajes protendidas
Individuais 01-lajes protendidasIndividuais 01-lajes protendidas
Individuais 01-lajes protendidas
 
Grelha 02-critérios de projeto
Grelha 02-critérios de projetoGrelha 02-critérios de projeto
Grelha 02-critérios de projeto
 
Apostila solidworks impressa
Apostila solidworks impressaApostila solidworks impressa
Apostila solidworks impressa
 
Individuais 02-tqs preo - projeto de estruturas pre-moldadas
Individuais 02-tqs preo - projeto de estruturas pre-moldadasIndividuais 02-tqs preo - projeto de estruturas pre-moldadas
Individuais 02-tqs preo - projeto de estruturas pre-moldadas
 
112131953 apostila-solidworks-2009
112131953 apostila-solidworks-2009112131953 apostila-solidworks-2009
112131953 apostila-solidworks-2009
 
Lajes 03-editor de esforços e armaduras
Lajes 03-editor de esforços e armadurasLajes 03-editor de esforços e armaduras
Lajes 03-editor de esforços e armaduras
 
Hardware idepac
Hardware idepacHardware idepac
Hardware idepac
 

Viewers also liked

Web develop in flask
Web develop in flaskWeb develop in flask
Web develop in flaskJim Yeh
 
Flask Introduction - Python Meetup
Flask Introduction - Python MeetupFlask Introduction - Python Meetup
Flask Introduction - Python MeetupAreski Belaid
 
What The Flask? and how to use it with some Google APIs
What The Flask? and how to use it with some Google APIsWhat The Flask? and how to use it with some Google APIs
What The Flask? and how to use it with some Google APIsBruno Rocha
 
Django para portais de alta visibilidade. tdc 2013
Django para portais de alta visibilidade.   tdc 2013Django para portais de alta visibilidade.   tdc 2013
Django para portais de alta visibilidade. tdc 2013Bruno Rocha
 
Python Flask app deployed to OPenShift using Wercker CI
Python Flask app deployed to OPenShift using Wercker CIPython Flask app deployed to OPenShift using Wercker CI
Python Flask app deployed to OPenShift using Wercker CIBruno Rocha
 
LvivPy - Flask in details
LvivPy - Flask in detailsLvivPy - Flask in details
LvivPy - Flask in detailsMax Klymyshyn
 
When to use Node? Lessons learned
When to use Node? Lessons learnedWhen to use Node? Lessons learned
When to use Node? Lessons learnedbeatlevic
 
Web backends development using Python
Web backends development using PythonWeb backends development using Python
Web backends development using PythonAyun Park
 

Viewers also liked (9)

Web develop in flask
Web develop in flaskWeb develop in flask
Web develop in flask
 
Flask Introduction - Python Meetup
Flask Introduction - Python MeetupFlask Introduction - Python Meetup
Flask Introduction - Python Meetup
 
Flask – Python
Flask – PythonFlask – Python
Flask – Python
 
What The Flask? and how to use it with some Google APIs
What The Flask? and how to use it with some Google APIsWhat The Flask? and how to use it with some Google APIs
What The Flask? and how to use it with some Google APIs
 
Django para portais de alta visibilidade. tdc 2013
Django para portais de alta visibilidade.   tdc 2013Django para portais de alta visibilidade.   tdc 2013
Django para portais de alta visibilidade. tdc 2013
 
Python Flask app deployed to OPenShift using Wercker CI
Python Flask app deployed to OPenShift using Wercker CIPython Flask app deployed to OPenShift using Wercker CI
Python Flask app deployed to OPenShift using Wercker CI
 
LvivPy - Flask in details
LvivPy - Flask in detailsLvivPy - Flask in details
LvivPy - Flask in details
 
When to use Node? Lessons learned
When to use Node? Lessons learnedWhen to use Node? Lessons learned
When to use Node? Lessons learned
 
Web backends development using Python
Web backends development using PythonWeb backends development using Python
Web backends development using Python
 

Similar to Flask-Admin vs DIY Admin

Similar to Flask-Admin vs DIY Admin (20)

Apostila completa-html
Apostila completa-htmlApostila completa-html
Apostila completa-html
 
Access 97 avancado
Access 97 avancadoAccess 97 avancado
Access 97 avancado
 
Dicionario de termos_de_informatica-3ed
Dicionario de termos_de_informatica-3edDicionario de termos_de_informatica-3ed
Dicionario de termos_de_informatica-3ed
 
Manual do cologa
Manual do cologaManual do cologa
Manual do cologa
 
Curso De Acess
Curso De AcessCurso De Acess
Curso De Acess
 
Documentação - Administração e Treinador
Documentação - Administração e TreinadorDocumentação - Administração e Treinador
Documentação - Administração e Treinador
 
Material LINUX
Material LINUXMaterial LINUX
Material LINUX
 
Sql
SqlSql
Sql
 
Br Office Writer
Br Office WriterBr Office Writer
Br Office Writer
 
Moodle
MoodleMoodle
Moodle
 
Br office writer
Br office writerBr office writer
Br office writer
 
Caelum html-css-javascript-php
Caelum html-css-javascript-phpCaelum html-css-javascript-php
Caelum html-css-javascript-php
 
Guia de estudo 101 completo
Guia de estudo 101   completoGuia de estudo 101   completo
Guia de estudo 101 completo
 
Apostila ms project 2007
Apostila ms project 2007Apostila ms project 2007
Apostila ms project 2007
 
Apostila completa de project 2007
Apostila completa de project 2007Apostila completa de project 2007
Apostila completa de project 2007
 
Manual Excel
Manual ExcelManual Excel
Manual Excel
 
Caelum java-testes-jsf-web-services-design-patterns-fj22
Caelum java-testes-jsf-web-services-design-patterns-fj22Caelum java-testes-jsf-web-services-design-patterns-fj22
Caelum java-testes-jsf-web-services-design-patterns-fj22
 
Apostila
ApostilaApostila
Apostila
 
Apostila esssa
Apostila   esssaApostila   esssa
Apostila esssa
 
Apostila ata informatica_julio_alves
Apostila ata informatica_julio_alvesApostila ata informatica_julio_alves
Apostila ata informatica_julio_alves
 

Flask-Admin vs DIY Admin