web2py ロゴ | |
| 原作者 | マッシモ・ディ・ピエロ |
|---|---|
| 初回リリース | 2007年9月27日 |
| 安定版リリース | 2.27.1 [1]
/ 2023年11月16日 |
| リポジトリ | Web2pyリポジトリ |
| 書かれた | パイソン |
| プラットフォーム | クロスプラットフォーム |
| タイプ | Web アプリケーション フレームワーク |
| ライセンス | GNU 劣等一般公衆利用許諾書バージョン 3 (LGPLv3) |
| Webサイト | ウェブサイト |
Web2pyは、 Pythonプログラミング言語で書かれたオープンソースの Webアプリケーションフレームワークです。Web2pyを使用すると、 Web開発者はPythonを使用して動的なWebコンテンツをプログラムできます。Web2pyは、 Webフォームをゼロから開発するなどの面倒なWeb開発タスクを軽減するように設計されていますが、必要に応じてWeb開発者がフォームをゼロから構築することもできます。[2]
web2py はもともと、使いやすさと導入のしやすさを重視した教育ツールとして設計されました。そのため、プロジェクトレベルの設定ファイルはありません。web2py の設計は、Ruby on RailsとDjangoフレームワークにヒントを得ました。これらのフレームワークと同様に、web2py は迅速な開発に重点を置き、設定よりも規約を重視し、モデル・ビュー・コントローラ(MVC)アーキテクチャ パターンに従います。
概要
Web2py は、次のようなすべての主要な機能のコンポーネントが組み込まれているフルスタック フレームワークです。
- HTTPリクエスト、HTTP 応答、Cookie、セッション。
- 複数のプロトコル[3] HTML / XML、REST、ATOMおよびRSS、RTFおよびCSV、JSON、JSON-RPCおよびXML-RPC、AMF-RPC(Flash / Flex)、SOAP ; [4]
- CRUD API ;
- 複数の認証メカニズムとロールベースのアクセス制御。
- SQL を動的に生成し、複数の互換性のあるデータベース バックエンドで実行されるデータベース抽象化レイヤー(DAL) 。
- スケーラビリティのためのRAM、ディスク、およびmemcachedベースのキャッシュ。
- 国際化サポート;
- AjaxおよびUI効果用のjQuery 。
- コンテキストを伴うエラーの自動ログ記録。
Web2pyは、次のような健全なソフトウェアエンジニアリングの実践 を推奨しています。
- モデル・ビュー・コントローラ(MVC)パターン
- ウェブフォームの自己提出[5 ]
- サーバー側セッション。
- アップロードされたファイルの安全な取り扱い。
Web2pyは、WebサーバーとWebアプリケーション間の通信にPython指向のプロトコルであるWSGIプロトコルを使用します。また、 CGIとFastCGIプロトコルのハンドラも提供しており、マルチスレッドでSSL対応のRocket [6] wsgiserverも含まれています。
特徴的な機能
Web ベースの統合開発環境 (IDE)
すべての開発、デバッグ、テスト、メンテナンス、リモート データベース管理は、(オプションで) サードパーティ ツールを使わずに、web インターフェース (それ自体が web2py アプリケーション) を介して実行できます。国際化(言語の追加と翻訳の作成) もこのIDEから実行できます。各アプリケーションには、 Djangoに似た、自動的に生成されたデータベース管理インターフェースがあります。Web IDE には、Web ベースのテストも含まれています。
アプリケーションはコマンドラインから作成することも、他のIDEで開発することもできます。[7]その他のデバッグオプション: [8]
- Wing IDEはweb2pyアプリケーション[9]のグラフィカルなデバッグを可能にし、Webブラウザから操作することで、変数の検査や変更、関数呼び出しなどを行うことができます。
- Eclipse / PyDev — Aptana PyDevプラグインを搭載したEclipse — web2pyもサポートしています。[10] [11]
- 拡張可能な pdb デバッガーは、Python の標準ライブラリのモジュールです。
- プラットフォームに依存しないオープンソースのWinpdbデバッガーを使用すると、暗号化された接続を介してTCP/IP経由でリモートデバッグ[12]を実行できます。[13]
web2pyを使ったHello Worldプログラムの最も単純な形式(テンプレートのない 単純なWebページ[14] )は次のようになります。
def hello ():
'Hello World'を返す
Web2pyには、インデント要件がなく、サーバー側のドキュメントオブジェクトモデル(DOM )を備えた純粋なPythonベースのテンプレート言語が含まれています。テンプレートシステムはweb2pyなしでも動作します。[15] Joomla 1.xテンプレートはweb2pyレイアウトに変換できます。[16]
Web2pyには、2つのマークアップライブラリも含まれています。markdown2 text-to-HTMLフィルタは、Markdownマークアップをその場でHTMLに変換します。そして、markdownにインスパイアされていますが、テーブル、html5ビデオ/オーディオ、oembedプロトコルをサポートするmarkminです。
ビューのないコントローラーは、コントローラーによって返された変数をレンダリングする汎用ビューを自動的に使用するため、HTML を記述する前にアプリケーションのビジネス ロジックを開発できます。デフォルトのテンプレートを使用した「Hello World」の例:
def hello ():
dictを返します ( greeting = 'Hello World' )
アクションの dict() 出力は、ページが .html 拡張子で要求された場合は HTML で、ページが .json 拡張子で要求された場合は JSON で、.xml 拡張子で要求された場合は XML で自動的にレンダリングされます。jsonp、rss、ics、google maps などの他のプロトコルもサポートしており、拡張可能です。
以下は、テーブルを定義し、ログインしたユーザーにグリッドを公開する、より複雑なコード例です。
db . define_table ( 'thing' 、フィールド( 'name' 、notnull = True ))
@auth . requires_login ()
def hello ():
return dict ( grid = SQLFORM . grid ( db . thing ))
チケットシステム
各 web2py アプリケーションにはチケットシステムが付属しています。
- エラーが発生した場合はログに記録され、ユーザーにチケットが発行されます。これにより、エラーの追跡が可能になります。
- エラーとソース コードには管理者のみがアクセスでき、管理者は日付またはクライアント IP でエラーを検索して取得できます。エラーが発生しても、コードがユーザーに公開されることはありません。
ポータブル cron
Cron は、バックグラウンドで定期的なタスクを作成して実行するためのメカニズムです。標準の crontab 形式の アプリケーション固有のcrontabファイルを探します。3 つの操作モードが利用可能です:
- ソフト クーロン:クーロンルーチンは、Web ページのコンテンツが提供された後にチェックされますが、実行の精度は保証されません。権限のない Apache CGI/WSGI インストールの場合。
- ハード クーロン: web2py の起動時にクーロンスレッドが開始されます。Windows および Rocket/スタンドアロンの web2py インストール用。
- システム クーロン: クーロン関数は、通常はシステム クーロンタブから、コマンドラインから強制的に呼び出されます。Unix/Linux システムや、web2py が現在実行されていない場合でもクーロントリガーを実行する必要がある場所に適しています。また、システム クーロンタブにアクセスできる場合、CGI/WSGI インストールにも適しています。
スケジューラ
バージョン 2.3 以降、web2py にはマスター/ワーカー スケジューラが付属しているため、cron の使用は推奨されません。ジョブはモデルで定義でき、データベースにエントリを作成することでスケジュールされます。ユーザーは、バックグラウンドでタスクをピックアップして実行するワーク プロセスを開始できます。スケジュールは、より多くのパラメータ (開始時間、停止時間、繰り返し回数、エラーの場合の試行回数) を指定でき、一定のリソース使用率内でより適切に実行できるため、cron よりも優れています。
バイトコード配布
Web2py は、ソースコードなしで、バイトコードにコンパイルされた形式で配布するために Web アプリケーションをコンパイルできます。ビューに特殊なテンプレート言語を使用するフレームワークとは異なり、Web2py は純粋な Python コードであるため、ビュー コードをバイトコードにコンパイルすることもできます。
地球環境
Web2py は、モデルとコントローラがインポートされるのではなく実行されるという点で、Python Web フレームワークの世界ではユニークです。これらはモジュールではありません。これらは、HTTP リクエストごとに初期化される単一のグローバル環境で実行されます。この設計上の決定には、長所と短所があります。
主な利点は、開発の容易さ、特にラピッドプロトタイピングの容易さです。もう 1 つの利点は、この環境内で定義されたすべてのオブジェクトが各 HTTP リクエストできれいにリセットされ、リクエスト間で共有されないことです。つまり、開発者はオブジェクトの状態 (たとえば、データベース フィールドの読み取り可能属性) の変更を心配したり、他の同時リクエストや他のアプリケーションに変更が漏れることを心配したりする必要がないということです。3 つ目の利点は、web2py では、同じモジュールの異なるバージョンや、同じ名前の異なるモジュールを使用している場合でも、同じインスタンスで複数のアプリケーションを競合なく共存させることができることです。
グローバル環境の主な欠点は、モデルファイルとコントローラファイルがモジュールではなく、実行順序が重要であることです(ただし、条件付きモデルを使用して指定できます)。通常のPythonモジュールよりも、名前の競合が発生する可能性が高くなります。一部の標準的なPython開発ツールは、モデルとコントローラで定義されたオブジェクトを理解しない場合があります。さらに、開発者は、モデル内のコードはリクエストごとに実行され、パフォーマンスが低下する可能性があることに注意する必要があります。web2pyでは、開発者が通常のPythonモジュールを使用およびインポートすることを妨げるものは何もありません(モデルレスアプローチ)。この目的のために、web2pyは、現在のリクエストに関連付けられたオブジェクトへのアクセスを容易にするために、スレッドローカルオブジェクト(current)を提供します。ただし、この場合、開発者は他のフレームワークで発生するのと同じ落とし穴に注意する必要があります。モジュールで定義されたオブジェクトの状態を変更すると、他の同時リクエストに影響する可能性があります。
もう 1 つの欠点は、モデルとコントローラーがクラスベースではないため、効率的なコードの再利用が難しくなることです。特に、親コントローラー (Ruby on Rails の ApplicationController など) から継承できないため、共通のコントローラー機能をすべてのコントローラー ファイルで繰り返し参照する必要があるためです。
サポートされている環境
オペレーティングシステム、Python のバージョンと実装、仮想マシン、ハードウェア
web2pyはWindows、Windows CEフォン、Mac、Unix / Linux、Google App Engine、Amazon EC2、そしてPython 2.7/3.5/3.6/pypyを介してほぼすべてのウェブホスティングで動作します。 [2]
web2pyの現在のバイナリバージョン(WindowsまたはMac用)にはPython 2.7が含まれていますが、ソースバージョンは2.7および3.5以上で実行できます。Python 2.6のサポートは2017年に廃止されました。
web2py v1.64.0以降は、変更なしでJavaとJython 2.5上で実行でき、既知の制限はありません。[17]
web2pyのコードは.NET上のIronPythonで実行できます。[18]制限事項:
- csvモジュールなし(したがってデータベース I/O なし)。
- サードパーティのデータベース ドライバーはありません ( SQLiteもないため、データベースはまったくありません)。
- 組み込みの Web サーバーはありません (シグナルとログを削除して無効にしない限り)。
web2pyバイナリは、 Portable Pythonのように、依存性なしでUSBドライブやポータブルハードドライブ から実行できます[19] 。
ウェブサーバー
Web2pyは、組み込みのRocketサーバー[20]、Apache [21]、Lighttpd [22]、Cherokee [23 ] 、Hiawatha、Nginx、およびCGI、FastCGI、WSGI、mod_proxy [24] [25] [26] 、 mod_pythonを介して、ほぼすべての他のWebサーバーでHTTPおよびHTTPS経由のリクエストを処理できます。
IDEとデバッガー
多くの web2py 開発者はVim、Emacs、TextMateなどのテキスト エディタを使用していますが、Web2py には Web ベースの IDE も組み込まれています。デバッグやリファクタリングなどを提供する、より専門的なツールを好む人もいます。
- PyDevを統合したAptana Studio
- PyDevを使用したEclipse
- デバッガーを内蔵したEric 。 [27]
- ウィングIDE [28]
- Visual Studio用Python ツールを備えたMicrosoft Visual Studio
- Pycharm 3はWeb2pyフレームワークをサポートしています
データベース処理
web2py のデータベース抽象化レイヤー ( DAL ) は、動的かつ透過的に SQL クエリを生成し、データベース固有の SQL コマンドを必要とせずに、複数の互換性のあるデータベース バックエンドで実行します (ただし、SQL コマンドを明示的に発行することはできます)。
SQLiteは Python に含まれており、web2py のデフォルトのデータベースです。接続文字列を変更すると、いくつかの注意点がありますが、Firebird、IBM Db2、Informix、Ingres、Microsoft SQL Server、MySQL、Oracle、PostgreSQL、Google App Engine (GAE) に接続できます。特長:
- 複数のデータベース接続。
- 自動テーブルの作成と変更。
- 自動取引。
- 分散トランザクション:
- web2py v1.17以降ではPostgreSQL v8.2以降では、[29] [30] 2相コミット用のAPIを提供しているためです。
- web2py v1.70.1 以降、Firebird および MySQL (実験的) を搭載。
- GAE はリレーショナル ストアではありませんが、web2py は特定の操作をエミュレートします。
DALは高速であり、少なくともSQLAlchemyやStormに匹敵する。[31]
web2pyはORMではなくDALを実装しています。ORMはデータベーステーブルをデータベース層の論理抽象化を表現するクラス(例えばUserクラスやPurchaseOrderクラス)にマッピングし、レコードをそれらのクラスのインスタンスにマッピングします。DALはデータベーステーブルとレコードを、高レベルの抽象化ではなくセットとレコードを表現するクラスのインスタンスにマッピングします。ORMと非常によく似た構文を持ちますが、より高速で、ほぼすべてのSQL式をDAL式にマッピングできます。DALはweb2pyの他の部分とは独立して使用できます。[32]
DAL 構文の例をいくつか示します。
db = DAL ( 'postgresql://user:pass@localhost/db' 、 pool_size = 10 )
db . define_table ( 'person' 、Field ( 'name' )、Field ( 'image' 、'upload' ))
db . person . insert ( name = 'Martin' 、 image = open ( 'filename.png' ))
rows = db (( db . person . name == 'Martin' ) | db . person . name . contains ( 'T' )) . select ( orderby = db . person . name . lower ())
DAL の最新バージョンでは、Spatialite と PostGIS を使用した 2D GIS 機能がサポートされています。現在の API は、3D API に移行する可能性があるため、実験段階です。
自動データベース移行
web2py はデータベースの移行をサポートしています。テーブルの定義を変更すると、web2py はそれに応じてテーブルを変更します。移行は自動的に行われますが、任意のテーブルに対して無効にすることもできます。移行は通常、アプリケーションがライブ配信の準備ができたときに無効になります。移行と移行の試行はログに記録され、変更が文書化されます。
制限事項:
- SQLite はテーブルを変更して列の型を変更することはできませんが、新しい型に従って新しい値を保存するだけです。
- GAE には alter-table の概念がないため、移行は制限されます。
ライセンス
web2pyコードは、web2pyバージョン1.91.1以降、GNU Lesser General Public License (LGPL)バージョン3の下でリリースされています。 [33]
バージョン 1.91.1 より前の Web2py コードは、商用例外付きでGNU GPL v2.0の下でリリースされました。
web2py で配布される様々なサードパーティのパッケージには、独自のライセンスがあり、一般的にはパブリック ドメイン、MIT、またはBSDタイプのライセンスです。web2py で構築されたアプリケーションは、LGPL ライセンスの対象ではありません。
Web2py の著作権は Massimo DiPierro が所有しています。web2py の商標は Massimo DiPierro が所有しています。
受賞歴
2011年、InfoWorldはweb2pyをPythonウェブフレームワークのトップ6の中で最高位にランク付けし、web2pyにベストオープンソースアプリケーション開発ソフトウェアとしてBossie賞2011を授与しました。2012年、web2pyはInfoWorldテクノロジーオブザイヤー賞を受賞しました。[34] [35]
出版物
web2pyブック
web2pyの基本的なドキュメントはMassimo DiPierro著のThe Official web2py Bookです。マニュアルは完全なweb2pyアプリケーションであり、オンラインで無料で入手できます。[36] PDF形式または印刷形式で入手できます。
- 初版:絶版。Wiley 、 2008年9月16日、256ページ、ISBN 978-0-470-43232-7。
- 第2版: web2pyマニュアル。Wiley; 2009年8月26日; 341ページ; ISBN 978-0-470-59235-9。
- 第3版: Lulu; 2010年9月25日 357ページ。
- 第4版:ルル。 2011年12月9日583ページ。
- 第5版:PDFコピー、2013年3月3日、614ページ、ISBN 978-0-578-12021-8。
- 最新のオンラインソース: GitHub [37]
オンラインドキュメント
web2pyのホームページから、クックブック、ビデオ、インタラクティブな例、インタラクティブなAPIリファレンス、epydoc (完全なライブラリリファレンス)、FAQ、チートシート、オンラインツールなど を含むオンラインドキュメントへのリンクがあります。
- web2py のチートシート。
- web2pyslices、web2py の movuca ソーシャル ネットワークを使用して投稿されたレシピ。
- Web2py のクラッシュ コース (5 部構成のシリーズ)。
- Web2py スライド (古い)。
ビデオ
- web2py エンタープライズ Web フレームワーク チュートリアル。
- web2py「シュートアウト」ビデオチュートリアル。
- Google App Engine 上の web2py。
- web2py: 基本的な Web アプリを作成、編集、デプロイします。
印刷
- 「web2py アプリケーション開発クックブック」、Packt、2012 年
- web2py による Web プログラミング; Python Magazine ; Marco Tabini & Associates, Inc.; 2008 年 6 月
背景
開発者
web2pyの主任開発者は、シカゴのデポール大学のコンピュータサイエンスの准教授であるマッシモ・ディピエロです。2011年現在、web2pyのホームページには70人以上の「主な貢献者」がリストされています。[38]
開発ソースコード
web2py 開発ソースコードはメインリポジトリから入手できます:
web2pyに含まれるサードパーティソフトウェア
- Pythonベースのコンポーネント:
- Rocket は、高速で、HTTP/1.1準拠、マルチスレッド、SSL対応、ストリーミング対応のWSGIサーバーです。
- fcgi.py: FastCGI / WSGIゲートウェイ。
- Janrain、Dropbox、Google、LDAP、PAM、X509、CAS、OpenID、OAuth 1&2、Loginza のログイン API
- simplejson: シンプルで高速、完全、正確で拡張可能なJSONエンコーダーおよびデコーダー。
- markdown2: Markdownプロセッサ。
- fpdf PDF 生成用のライブラリ。
- PyRTF: RTFドキュメント ジェネレーター。
- 構文ハイライト機能。
- SOAP サービス用の pysimplesoap;
- PyRSS2Gen: RSSジェネレーター。
- feedparser: RSS およびAtomフィードを解析します。
- JavaScriptベースのコンポーネント:
- jQuery : 軽量のJavaScript ライブラリ。
- CodeMirror : ソースコード用の無料エディター。
- Cベースのコンポーネント:
- SQLite :リレーショナル データベース。
- memcached : 汎用分散メモリ キャッシュ システム。
- Authorize.Net、Google Wallet、Stripe.com 向け決済 API
歴史と命名
web2pyの最初の公開バージョンのソースコードは、2007年9月27日にMassimo DiPierroによって、Enterprise Web Framework (EWF)としてGNU GPL v2.0の下でリリースされました。名前の競合により、名前は2回変更されました。EWF v1.7の次はGluon v1.0、Gluon v1.15の次はweb2py v1.16です。ライセンスは、2010年12月21日のweb2pyバージョン1.91.1からLGPLv3に変更されました。
Web2pyで構築されたアプリケーション
- Movuca CMSおよびソーシャル ネットワーク エンジン。
- Instant Pressブログプラットフォーム。
- Ourway ソーシャル ネットワーキング サイト。
- NoobMusic ロック音楽のウェブサイト。
- LinkFindr ネットワーク診断ツール。
- StarMakerはカラオケスタイルのソーシャル音楽アプリを開発しています。
注記
- ^ 「web2py Webフレームワーク」。
- ^ ab 「web2pyとは?」web2py.com . Web2py . 2023年10月31日閲覧。
- ^ Web2pyはv1.63以降複数のプロトコルに対応しています
- ^ web2pyでSOAPを使用する
- ^ スマートな Web ベースのフォームの作成
- ^ ロケットウェブサーバー
- ^ It's All Text! Firefox アドオンと Ulipad (オープンソースの Python IDE)を備えた Web2py オンライン IDE
- ^ Web2py アプリケーションをデバッグするにはどうすればいいですか?
- ^ Wing IDEはweb2pyのデバッグをサポートします
- ^ Eclipse/PyDevはweb2pyのデバッグをサポートします
- ^ Eclipse で web2py を使用する
- ^ Winpdbを使用するとTCP/IP経由でリモートデバッグを行うことができます
- ^ Winpdb での暗号化通信
- ^ web2py を使用した最もシンプルな Web ページ: "Hello World" の例
- ^ web2pyなしでweb2pyテンプレートを使用する方法
- ^ web2py で Joomla テンプレートを使用する
- ^ Web2pyはJythonを使用してJavaとJ2EE上で完全に動作します
- ^ Web2pyは制限付きで.NET上のIronPythonで動作します
- ^ USB サムドライブ上の web2py Windows バイナリを含む MySQL
- ^ 組み込みSSLサーバーの実行方法
- ^ Apache と mod_ssl を使用した Web2py
- ^ Lighttpd と FastCGI を使用した Web2py
- ^ Cherokee を使用した Web2py
- ^ Apache モジュール mod_proxy
- ^ mod_proxy を使用した Web2py
- ^ mod_proxy と mod_proxy_html を使用した Web2py
- ^ エリック IDE プロジェクト
- ^ web2py で Wing IDE を使用する
- ^ PostgreSQL による分散トランザクション
- ^ PostgreSQL による分散トランザクション — 詳細
- ^ ORMベンチマーク
- ^ web2pyなしでweb2py DALを使用する方法
- ^ web2py ライセンス契約
- ^ Grehan, Rick. 「Pillars of Python: 6 つの Python Web フレームワークの比較」。InfoWorld。2017年 11 月 30 日閲覧。
- ^ スタッフ、InfoWorld Reviews。「InfoWorldの2012年テクノロジー・オブ・ザ・イヤー賞受賞者」。InfoWorld 。 2017年11月30日閲覧。
- ^ 「web2py - オンライン公式マニュアル」web2py.com . 2018年11月14日閲覧。
- ^ "web2py/web2py-book". GitHub . 2018年11月14日閲覧。
- ^ web2pyの主な貢献者リスト
外部リンク
- 公式サイト
