私は、バックエンドとフロントエンドの間の緊密な結合という異端的な考えを固く信じています。ユーザーインターフェイスを生成するときに、バックエンドに関する既存の暗黙の知識を自動的に利用したいと考えています。たとえば、VARCHAR列の最大文字数が20文字の場合、GUIは、ユーザーが関連するフォームフィールドに20文字を超えて入力することを自動的に制限する必要があります。
また、データベーステーブルを定義したいORMや、ORMのためにすべてのテーブルに追加の数値ID列が必要なハックに基づいているORMには強い反感があります。
私はPythonデータベースフレームワークを少し調べましたが、SQLAlchemyが私の考え方に最も適していると結論付けることができると思います。
ここで、SQLAlchemy(または同等のもの)に自然に適合し、おそらく結合への欲求にも適合するWebアプリケーションフレームワークを見つける必要があります。「Webアプリケーションフレームワーク」とは、Pyhons、Django、TurboGears、web2pyなどの製品/プロジェクトを意味します。
たとえば、理想的には次のことができるはずです。
- 指示された場合、特定の列に入力するデータに適したフォームウィジェットを自動的に選択します。たとえば、列に10個の異なる値を持つ列への外部キーがある場合、ウィジェットは10個の可能な値をドロップダウンとして表示する必要があります
- INTEGER列などに文字列が入力されようとしているフィールドに文字列が入力された場合に、エンドユーザーに迅速なエラーフィードバックを提供するjavascriptフォーム検証コードを自動生成します。
- 最終的にDATE列になるデータのカレンダーウィジェットを自動生成します
- 関連する入力フィールドの空または空白のみのデータについて文句を言うjavascriptとしてNOTNULL制約をヒントします
- 関連する(単純な) CHECK制約に一致するjavascript検証コードを生成します
- プリペアドステートメントや外部から派生したデータの検証を使用して、SQLインジェクションを簡単に回避できるようにします
- 必要に応じて発信文字列を自動的にエスケープすることにより、クロスサイトスクリプティングを簡単に回避できます
- 制約に違反した場合に備えて、制約名を使用して、ユーザーフレンドリーなエラーメッセージを生成します。
これはすべて動的に行われる必要があるため、テーブルの調整はフロントエンドに自動的に反映されます。おそらくキャッシュメカニズムを使用して、すべてのモデルのイントロスペクションによってパフォーマンスが低下することはありません。つまり、データベースでモデル定義がすでに慎重に定義されている場合は、XMLファイル(または同様のファイル)でモデル定義を繰り返したくありません。
そのようなフレームワークはPython(またはそれに関しては任意の言語)に存在しますか?そうでない場合:上記の機能の一部を自分で追加した場合、いくつかのPython Webアプリケーションフレームワークのどれが最も邪魔になりませんか?