web2py開発元 ⇒Massimo Di Pierro
最新版2.19.1 / 2020年3月22日 (4年前) (2020-03-22)
リポジトリ
github.com/web2py/web2py
web2pyは、データベースを使用するタイプのWebアプリケーションを、アジャイルで開発するためのオープンソースのフレームワークである。web2py はPythonで書かれており、Pythonでプログラム可能である。web2pyはセキュリティーの確保に重点を置いている。例えばデフォルトで入力値の検証を行ったり、出力のエスケープを行う仕組みを提供している。これらの仕組みはSQLインジェクション、クロスサイトスクリプティング、安全でないオブジェクトの直接参照といったよくある脆弱性の問題を未然に防ぐ。またweb2pyはModel View Controllerパターン、フォームの自己URLに対する送信、サーバー側でのセッションの維持、ファイルのアップロードの安全な取り扱いの仕組みなど、ソフトウェア工学に基づいた健全な開発手法を積極的に取り入れている。
web2pyはサイト構築に必要となる主な部品がビルトインで提供される、フルスタックなフレームワークである。例えば次のような部品が提供されている。
クッキーのハンドラー、HTTPリクエスト、HTTPレスポンス
設定可能なRAMディスク、メモリキャッシュ
国際化
自動的なエラーと実行内容のログの取得
動的にSQL文を生成するデータベース抽象化レイヤー。このデータベースレイヤーはGoogle App Engineにも対応している
複数のデータベースへの対応(SQLite, MySQL, PostgreSQL, Oracle, Microsoft SQL Server, Firebird, IBM DB2 and Google App Engine)
複数の認証機構への対応と役割に基づいたアクセス制御
CRUD API
rss, csv, xml, json, xmlrpc, jsonrpc, amfrpc (Flash)に対応したサービスAPI
web2pyはDePaul Universityで教育用のツールとして開発されており、そのため学習曲線が非常に浅いという点で他のフレームワークとは異なっている。この理由から、簡単にサイトが立ち上げられるよう設計されており(インストール作業が不要)、開発、デバッグ、検証、メンテナンス、遠隔でのDB管理が外部のツールを必要とすることなく、ウェブベースで行えるようなインターフェースが用意されている。
web2pyは最新のPythonのウェブサーバとウェブアプリケーションの間のプロトコルであるWSGIに従っている。またweb2pyはCGIやFastCGIでも稼動可能。TLSが有効化されたCherryPy WSGIサーバーも備えているので、Apacheなどの外部のウェブサーバーは不要である。Apacheと動かすことももちろん可能。
出版物
Web programming with web2py, Python Magazine, June 2008
⇒web2py Manual, Massimo DiPierro, Wiley, 2008
リンク
⇒web2py Website at DePaul University
Google Groups web2py forum
web2py Enterprise Web Framework (video)
web2py on the Google appengine (video)
web2py "Shootout" Tutorial (video)
web2py-japan(日本語)
.mw-parser-output .asbox{position:relative;overflow:hidden}.mw-parser-output .asbox table{background:transparent}.mw-parser-output .asbox p{margin:0}.mw-parser-output .asbox p+p{margin-top:0.25em}.mw-parser-output .asbox{font-size:90%}.mw-parser-output .asbox-note{font-size:90%}.mw-parser-output .asbox .navbar{position:absolute;top:-0.90em;right:1em;display:none}
この項目は、FLOSSに関連した書きかけの項目です。この項目を加筆・訂正などしてくださる協力者を求めています(Portal:FLOSS)。
.mw-parser-output .hlist ul,.mw-parser-output .hlist ol{padding-left:0}.mw-parser-output .hlist li,.mw-parser-output .hlist dd,.mw-parser-output .hlist dt{margin-right:0;display:inline-block;white-space:nowrap}.mw-parser-output .hlist dt:after,.mw-parser-output .hlist dd:after,.mw-parser-output .hlist li:after{white-space:normal}.mw-parser-output .hlist li:after,.mw-parser-output .hlist dd:after{content:" ・\a0 ";font-weight:bold}.mw-parser-output .hlist dt:after{content:": "}.mw-parser-output .hlist-pipe dd:after,.mw-parser-output .hlist-pipe li:after{content:" |\a0 ";font-weight:normal}.mw-parser-output .hlist-hyphen dd:after,.mw-parser-output .hlist-hyphen li:after{content:" -\a0 ";font-weight:normal}.mw-parser-output .hlist-comma dd:after,.mw-parser-output .hlist-comma li:after{content:"、";font-weight:normal}.mw-parser-output .hlist-slash dd:after,.mw-parser-output .hlist-slash li:after{content:" /\a0 ";font-weight:normal}.mw-parser-output .hlist dd:last-child:after,.mw-parser-output .hlist dt:last-child:after,.mw-parser-output .hlist li:last-child:after{content:none}.mw-parser-output .hlist dd dd:first-child:before,.mw-parser-output .hlist dd dt:first-child:before,.mw-parser-output .hlist dd li:first-child:before,.mw-parser-output .hlist dt dd:first-child:before,.mw-parser-output .hlist dt dt:first-child:before,.mw-parser-output .hlist dt li:first-child:before,.mw-parser-output .hlist li dd:first-child:before,.mw-parser-output .hlist li dt:first-child:before,.mw-parser-output .hlist li li:first-child:before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child:after,.mw-parser-output .hlist dd dt:last-child:after,.mw-parser-output .hlist dd li:last-child:after,.mw-parser-output .hlist dt dd:last-child:after,.mw-parser-output .hlist dt dt:last-child:after,.mw-parser-output .hlist dt li:last-child:after,.mw-parser-output .hlist li dd:last-child:after,.mw-parser-output .hlist li dt:last-child:after,.mw-parser-output .hlist li li:last-child:after{content:")\a0 ";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li:before{content:" "counter(listitem)" ";white-space:nowrap}.mw-parser-output .hlist dd ol>li:first-child:before,.mw-parser-output .hlist dt ol>li:first-child:before,.mw-parser-output .hlist li ol>li:first-child:before{content:" ("counter(listitem)" "}.mw-parser-output .navbar{display:inline;font-size:75%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}.mw-parser-output .infobox .navbar{font-size:88%}.mw-parser-output .navbox .navbar{display:block;font-size:88%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}