Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Atsushi Odagiri
1,652 views
Form libraries
Read more
4
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 56
2
/ 56
3
/ 56
4
/ 56
5
/ 56
6
/ 56
7
/ 56
8
/ 56
9
/ 56
10
/ 56
11
/ 56
12
/ 56
13
/ 56
14
/ 56
15
/ 56
16
/ 56
17
/ 56
18
/ 56
19
/ 56
20
/ 56
21
/ 56
22
/ 56
23
/ 56
24
/ 56
25
/ 56
26
/ 56
27
/ 56
28
/ 56
29
/ 56
30
/ 56
31
/ 56
32
/ 56
33
/ 56
34
/ 56
35
/ 56
36
/ 56
37
/ 56
38
/ 56
39
/ 56
40
/ 56
41
/ 56
42
/ 56
43
/ 56
44
/ 56
45
/ 56
46
/ 56
47
/ 56
48
/ 56
49
/ 56
50
/ 56
51
/ 56
52
/ 56
53
/ 56
54
/ 56
55
/ 56
56
/ 56
More Related Content
PDF
プロダクトに 1 から Vue.js を導入した話
by
Shohei Okada
PDF
Nuxt なしで Vue App 作る時に乗り越えるべき5つの壁
by
Yutaro Miyazaki
PDF
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド
by
Yuichi Sakuraba
PDF
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
by
a know
PDF
Vue.js 基礎 + Vue CLI の使い方
by
Kei Yagi
PDF
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
by
Kei Yagi
PDF
はじめてのVue.js
by
Kei Yagi
PPTX
Notes関数@Thisnameについて
by
RyoTakiguchi2
プロダクトに 1 から Vue.js を導入した話
by
Shohei Okada
Nuxt なしで Vue App 作る時に乗り越えるべき5つの壁
by
Yutaro Miyazaki
From Swing to JavaFX - SwingからJavaFXへのマイグレーションガイド
by
Yuichi Sakuraba
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
by
a know
Vue.js 基礎 + Vue CLI の使い方
by
Kei Yagi
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
by
Kei Yagi
はじめてのVue.js
by
Kei Yagi
Notes関数@Thisnameについて
by
RyoTakiguchi2
What's hot
PDF
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
by
Mikiya Okuno
PDF
Vue Router + Vuex
by
Kei Yagi
PDF
jQuery Mobile 1.3 最新情報
by
yoshikawa_t
PDF
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門
by
Hirokazu Nishi
PDF
Scene BuilderでFXML
by
Yuichi Sakuraba
PPTX
チュートリアルではじめるVue.js
by
小川 昌吾
PDF
React で CSS カプセル化の可能性を考える
by
Yutaro Miyazaki
PPTX
モテる JavaScript
by
Osamu Monoe
PPTX
AngularJS入門
by
Kenji Shirane
PPT
WordPress×jQueryMobile
by
Takami Kazuya
PPT
アプリコンテスト
by
Tomonori Yamada
PDF
Ext.direct
by
Shuhei Aoyama
PDF
WordPress widget api
by
Takami Kazuya
PDF
0406web creators night_DeNA
by
DeNA_open_events
PDF
JavaFX 2.0 - リッチクライアントのためのUI基盤
by
Yuichi Sakuraba
PDF
Viewを活用して複雑化と戦う
by
Kenjiro Kubota
PDF
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
by
Akira Inoue
PDF
Componentization with Gilgamesh
by
Yusuke Goto
PPTX
Windows ストアアプリのgrid viewを入門してみた
by
一希 大田
PPTX
Magento cafe plus #12
by
Hirokazu Nishi
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
by
Mikiya Okuno
Vue Router + Vuex
by
Kei Yagi
jQuery Mobile 1.3 最新情報
by
yoshikawa_t
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門
by
Hirokazu Nishi
Scene BuilderでFXML
by
Yuichi Sakuraba
チュートリアルではじめるVue.js
by
小川 昌吾
React で CSS カプセル化の可能性を考える
by
Yutaro Miyazaki
モテる JavaScript
by
Osamu Monoe
AngularJS入門
by
Kenji Shirane
WordPress×jQueryMobile
by
Takami Kazuya
アプリコンテスト
by
Tomonori Yamada
Ext.direct
by
Shuhei Aoyama
WordPress widget api
by
Takami Kazuya
0406web creators night_DeNA
by
DeNA_open_events
JavaFX 2.0 - リッチクライアントのためのUI基盤
by
Yuichi Sakuraba
Viewを活用して複雑化と戦う
by
Kenjiro Kubota
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
by
Akira Inoue
Componentization with Gilgamesh
by
Yusuke Goto
Windows ストアアプリのgrid viewを入門してみた
by
一希 大田
Magento cafe plus #12
by
Hirokazu Nishi
Similar to Form libraries
PDF
Pyramid入門
by
Atsushi Odagiri
PDF
PlaySQLAlchemyORM2017.key
by
泰 増田
KEY
Yesodを支える技術
by
Hiromi Ishii
PDF
Django boodoo
by
泰 増田
PDF
Teclab3
by
Eikichi Yamaguchi
PPT
symfony 1.2を支えるサブフレームワーク
by
Katsuhiro Ogawa
PDF
Bplt11 form alchemy
by
Atsushi Odagiri
Pyramid入門
by
Atsushi Odagiri
PlaySQLAlchemyORM2017.key
by
泰 増田
Yesodを支える技術
by
Hiromi Ishii
Django boodoo
by
泰 増田
Teclab3
by
Eikichi Yamaguchi
symfony 1.2を支えるサブフレームワーク
by
Katsuhiro Ogawa
Bplt11 form alchemy
by
Atsushi Odagiri
More from Atsushi Odagiri
PDF
Sqlalchemy sqlの錬金術
by
Atsushi Odagiri
PDF
パッケージングの呼び声 Python Charity Talks in Japan 2021.02
by
Atsushi Odagiri
PDF
Pythonでの開発を効率的に進めるためのツール設定
by
Atsushi Odagiri
PDF
async/await の向こう側 PyCon Kyushu 2022
by
Atsushi Odagiri
PDF
パッケージングを支える技術 pyconjp2016
by
Atsushi Odagiri
PDF
Pythonとパッケージングと私
by
Atsushi Odagiri
PDF
パッケージングの今
by
Atsushi Odagiri
PDF
eggとはなんだったのか 栄光のsetuptools
by
Atsushi Odagiri
PDF
What makes pyramid unique
by
Atsushi Odagiri
PPTX
Clack meetup #1 lt
by
Atsushi Odagiri
PDF
みんなのPython勉強会#77 パッケージングしよう
by
Atsushi Odagiri
PDF
Setup.pysetup.cfg
by
Atsushi Odagiri
PDF
パッケージングの今と未来
by
Atsushi Odagiri
PDF
World plonedaylt
by
Atsushi Odagiri
PDF
Python3でwebアプリ
by
Atsushi Odagiri
PDF
エキPy lt repoze.whoの紹介
by
Atsushi Odagiri
PDF
パッケージングの今と未来
by
Atsushi Odagiri
PDF
pyconjp 2019 LT 今日のsetuptools
by
Atsushi Odagiri
PDF
Python3 移行への軌跡
by
Atsushi Odagiri
PDF
Pyconjp2012 memory-of-europython
by
Atsushi Odagiri
Sqlalchemy sqlの錬金術
by
Atsushi Odagiri
パッケージングの呼び声 Python Charity Talks in Japan 2021.02
by
Atsushi Odagiri
Pythonでの開発を効率的に進めるためのツール設定
by
Atsushi Odagiri
async/await の向こう側 PyCon Kyushu 2022
by
Atsushi Odagiri
パッケージングを支える技術 pyconjp2016
by
Atsushi Odagiri
Pythonとパッケージングと私
by
Atsushi Odagiri
パッケージングの今
by
Atsushi Odagiri
eggとはなんだったのか 栄光のsetuptools
by
Atsushi Odagiri
What makes pyramid unique
by
Atsushi Odagiri
Clack meetup #1 lt
by
Atsushi Odagiri
みんなのPython勉強会#77 パッケージングしよう
by
Atsushi Odagiri
Setup.pysetup.cfg
by
Atsushi Odagiri
パッケージングの今と未来
by
Atsushi Odagiri
World plonedaylt
by
Atsushi Odagiri
Python3でwebアプリ
by
Atsushi Odagiri
エキPy lt repoze.whoの紹介
by
Atsushi Odagiri
パッケージングの今と未来
by
Atsushi Odagiri
pyconjp 2019 LT 今日のsetuptools
by
Atsushi Odagiri
Python3 移行への軌跡
by
Atsushi Odagiri
Pyconjp2012 memory-of-europython
by
Atsushi Odagiri
Form libraries
1.
Various Web Form Widget
Toolkits aodag Pycon JP 2011
2.
お前誰よ @aodag 小田切篤 BeProud勤務 今別の部屋で発表しているianと同僚 Djangoきらいです(´・ω・`) PylonsとかPyramidとか、既存のコンポーネント組み合わせてるもの のほうが好きです。
3.
SQLAlchemy ● データマッパー ● すごく柔軟
4.
WSGI (PEP-333, PEP-3333) PythonのWebアプリケーション標準 def
hello(environ, start_response): start_response("200 OK", [('Content-type', 'text/plain')]) return ["Hello, world!"]
5.
Adminアプリケーション Djangoのadmin(だけ)はいいね! SQLAlchemyにも同じようなものがほしい WSGIアプリで全般的に使いたい(あまりフレームワークに依存したく ない) Ajaxばりばりである必要はないけど、DatePickerとかSuggestとか、入 力補助系のJSが利用できるとよい
6.
Adminアプリケーション ● クラスごとにサブアプリケーション ● グリッド表示と検索 ●
入力フォーム ● カスタムアクションを追加できる
7.
フォームライブラリを調査 Form Libraryの役割 比較ライブラリ
8.
Form Libraryの役割 ● HTMLフォーム生成 ●
バリデーション
9.
比較ライブラリ ● ToscaWidgets /
Sprox ● FormAlchemy ● tw2.sqla ● WTForms ● deform/colander
10.
比較のポイント ● SQLAlchemyとの親和性 ● バリデータのカスタマイズ ●
フィールドのカスタマイズ ● ウィジェットのカスタマイズ
11.
ToscaWidgets / Sprox ●
SproxはSQLAlchemyのスキーマからToscaWidgetsのフォームを 作成します ● SQLAlchemyのスキーマ以外のフィールドをフォームに追加した り、スキーマのフィールドをフォームから削除したりできます。 ● formencodeでカスタムバリデータを作成します ● tw.formsでカスタムフィールドを作成します
12.
FormAlchemy ● SQLAlchemyだけでなく、zope.schemaなどにも対応 ● SQLAlchemyのスキーマ対応は一番すぐれている ●
デフォルトで用意されているウィジェットレンダラーが少ない ● 実行時にもフィールド定義を変更可能 ● jqueryuiを使ったfa.jqueryのような追加スキンが存在する
13.
tw2 ● ToscaWidgetsの後継 ● まだ
a4がリリースされたばかり、 発展途上 ● SQLAlchemyから自動生成するフォームがある ○ many-to-manyまでは対応できてない ● SQLAlchemyというよりElixirに対応している
14.
wtforms ● SQLAlchemyからのスキーマ生成はしない ● SelectのoptionをSQLAlchemyのクエリで設定可能 ●
機能は少なめ ● その分はまりどころが少なく枯れるのが早そう ● フォーム全体の生成はしない ● グリッド生成もしない ● ToscaWidgetsのtw.formsと名前が紛らわしい><
15.
deform / colander
● colanderはスキーマ定義 ● deformはcolanderに対応しているフォームライブラリ ● SQLAlchemyからのスキーマ生成できない ● ウィジェットが豊富 ● ajaxとりこみに意欲的 ● deferred bindingにより実行時にウィジェットやバリデーションを変 更可能 ● テンプレートにchameleon(zope page template)を使っている ● テンプレートをmakoに入れ替えるプロジェクトが進行中 http://deformdemo.repoze.org/
16.
Sample Model SQLAlchemy ●
User ○ user_name ○ password ○ user_image ○ groups ● Group ○ name ○ users ○ permissions ● Permission ○ name ○ groups
18.
ポイント ● 全部many-to-manyの関連付け ● User
- Group - Permission ● User - Permissionの派生関連付け ● _password 直接見せたくないフィールド ● ユーザー画像はファイル保存
19.
Userフォーム Sprox class UserForm(AddRecordForm):
__model__ = models.User __require_fields__ = ['user_name'] __omit_fields__ = ['_password'] __field_order__ = ['user_name', 'password', 'groups'] password = tw.forms.PasswordField('password', validator=tw.forms.validators.NotEmpty)
21.
Userグリッド Sprox class UserTable(TableBase):
__model__ = models.User user_table = UserTable(models.DBSession) class UserTableFiller(TableFiller): __model__ = models.User user_table_filler = UserTableFiller(models.DBSession) user_table(user_table_filler.get_value())
23.
Sprox雑感 ● AddRecordFormとEditableFormをそれぞれ作らないといけない ● SQLAlchemy0.7で動かない! ●
many-to-manyがうまくフォームに反映されない ● デフォルトでアルファベット順になってしまうので、いい感じの順 番にするには、全部指定しなおさないといけません(´・ω・`)
24.
(´・ω・`) そろそろ オワコン?
25.
Userフォーム FormAlchemy class UserForm(FieldSet):
def __init__(self, **kw): super(UserForm, self).__init__(model=User, **kw) excludes = [self._password] # 追加フィールド self.insert_after(self.user_name, Field('password').password().required()) self.configure(exclude=excludes) # フォーム全体の設定
27.
User グリッド FormAlchemy class
UserGrid(Grid): def __init__(self, **kw): super(UserGrid, self).__init__(cls=models.User, **kw) # Edit用のリンク追加 self.append(Field('edit_link', value=lambda u: '<a href="%s/edit" >Edit</a>' % u.id)) self.configure(readonly=True, exclude=[self._password]) users = models.DBSession.query(models.User).all() grid = user_grid.bind(users)
29.
FormAlchemy雑感 やっぱりSQLAlchemy0.7で動かない(´・ω・`) fa.jqueryはまだ安定していない many-to-manyをしっかりおいかけてくれる 開発が活発なので、今後に期待できる
30.
全体的には (・∀・)イイ! と思う
31.
Userフォーム tw2.sqla class UserForm(tw2.sqla.DbFormPage):
entity = models.User class child(tw2.forms.TableForm): user_name = tw2.forms.TextField(validator=tw2.core.Required) password = tw2.forms.PasswordField(validator=tw2.core. Required) user_image = tw2.forms.FileField() groups = tw2.sqla.DbSingleSelectField(entity=models.Group)
32.
● SQLAlchemyのスキーマから自動生成する機能が追加されてき
ていますが、使い物になりませんでした。(´・ω・`) ● あと、entityクラスのqueryメソッドを呼ぼうとしたり、Elixirを前提に しすぎです。 ● 遅延評価できるselectウィジェットに複数選択可能なものがなく、 many-to-manyの関連付けに困ります
33.
(゚д゚) マダマダ
34.
Userフォーム WTForms def group_factory():
return models.DBSession.query(models.Group) class UserForm(wtforms.Form): username = wtforms.TextField('User Name') password = wtforms.PasswordField('Password') groups = QuerySelectMultipleField(query_factory=group_factory )
35.
WTForms表示 <form method="post"> <table> ${self.field_row(form.username)} ${self.field_row(form.password)} ${self.field_row(form.groups)} </table> <button type="submit">Add</button> </form>
36.
WTForms 表示 <%def name="field_row(field)"> <tr> <td> ${field.label} </td> <td> ${field()} </td> </tr> </%def>
38.
WTForms 雑感 ● やれることが少ない分、はまりどころはなさそうです ●
でもフォームライブラリ使ってるのにHTMLテーブル書くのはやで す。 ● B2Cサイトで複雑なHTMLに入れるのに向いてそうですが、そん なことは他のフォームライブラリでできます
39.
機能 少なすぎね? (´・ω・`)
40.
Userフォーム deform class UserSchema(c.MappingSchema):
# colanderはSQLAlchemyから自動生成しない user_name = c.SchemaNode(c.String()) password = c.SchemaNode(c.String(), widget=w.PasswordWidget()) form = Form(UserSchema(), buttons=('save',))
42.
colanderのdeferred bind 定義 実行時に、ウィジェット、やバリデータを切り替える仕組み @c.deferred def
group_select_widget(node, kw): groups = kw['groups'] return w.SelectWidget(values=[ (g.id, g.group_name) for g in groups ])
43.
colander deffered binding class
Group(c.MappingSchema): # groupを選択するためのスキーマ group_id = c.SchemaNode(c.String(), widget=group_select_widget) class Groups(c.SequenceSchema): # groupを複数選択するためのスキーマ group = Group() class UserSchema(c.MappingSchema): ...... groups = Groups()
44.
colanderのdeferred bind バインディング schema
= UserSchema() groups = DBSession.query(Group) # バインド schema = schema.bind(groups=groups) form = Form(schema, ....)
46.
User フォーム deform
バリデーション try: params = form.validate(controls) except ValidationFailure, e: e.render()
47.
deform 雑感 ● フォームでやりたいことは、おそらくなんでもできます。 ●
シーケンススキーマやマッピングスキーマを組み合わせることで、 複雑な階層を持つスキーマも作成可能。 ● その分ライブラリの構造が複雑です。
48.
(´ > ω < ) むずかしー!
49.
ひとまずSQLAlchemyのデータ管理ツールを作るなら、FormAlchemy が一番サポートされている。fa.jqueryは様子見たほうがいい。 1リクエストで複数のモデルを扱う場合は、colander / deform
がほぼ どんな構造でも対応できる。MongoDBなどスキーマレスDBを使う場 合は、こちらをおすすめする。
50.
スタティックファイルの管理 deformやfa.jqueryはjquery.jsやjqueryui.js、その他cssなどが必要 フロントのApacheやnginexに任せてしまいたいが、 フォームライブラリが使うスタティックファイルはどこにあるのか? ウィジェットライブラリが依存するjsなどをどう管理していくか?
51.
Paste deployでがんばr [app:deform_static] use =
egg:paste#pkg_resources egg = deform resource_name = deform/static [composite:deform] use = egg:paste#urlmap / = deform_app /static = deform_static [pipeline:deform_demo] pipeline = egg:repoze.tm2#tm deform
52.
Fanstatic ● スタティックファイルをホスティングするWSGIアプリ
● スタティックファイルを管理するユーティリティ、ミドルウェア ● fa.jqueryは今後これを使うようになる予定 http://pypi.python.org/pypi?% 3Aaction=search&term=fanstatic&submit=search
53.
Fanstatic 例 from fanstatic
import Fanstatic from js.jqueryui import jqueryui @wsgify def app(request): jqueryui.need() return Response(body) app = Fanstatic(app)
54.
Fanstatic 例 body =
""" <html> <head> </head> <body> Hello </body> </html> """
55.
Fanstatic 例 実行結果 <html> <head>
<script type="text/javascript" src="/fanstatic/jquery/jquery.js" ></script> <script type="text/javascript" src="/fanstatic/jqueryui/ui/jquery-ui.js" ></script> </head> <body> Hello </body> </html>
56.
参考 ● SQLAlchemy http://www.sqlalchemy.org/ ●
ToscaWidgets http://toscawidgets.org/ ● formencode http://formencode.org/ ● Sprox http://sprox.org/ ● tw2 http://toscawidgets.org/documentation/tw2.core/ ● formalchemy http://docs.formalchemy.org/formalchemy ● fa.jquery http://docs.formalchemy.org/fa.jquery/ ● WTForms http://wtforms.simplecodes.com/ ● colandar https://docs.pylonsproject.org/projects/colander/dev/ ● deform https://docs.pylonsproject.org/projects/deform/dev/ ● fanstatic http://www.fanstatic.org/en/0.11.2/index.html
Download