web-dev-qa-db-ja.com

pythonフォーム検証ライブラリの推奨事項

フォーム検証ライブラリが欲しい

1.フォーム検証からHTML生成を分離します。

2.検証エラーは簡単にシリアル化できます。 jsonオブジェクトとしてダンプ

python Webプロジェクトでどのフォーム検証ライブラリを選択しますか?

37
satoru

免責事項

一般的に言って、私は現在、HTMLフォームライブラリについて少し警戒しています。メガフレームワークの何かを使用する場合は、必ずメガフレームワーク全体を依存関係として取り込む必要があります。

多くのメガフレームワークの多くのサブコンポーネントは、フレームワークに依存しないと主張していますが、自分自身をひっくり返さないようにしましょう。使用しない場合、少なくとも12のフォームライブラリがあり、さまざまな機能の違いがあります。選択だけではかなり混乱する可能性があります。一般的に言って、Ian Bicking says は何年も前に、まだ真実であるので、私は誰にでも合う1つのフォームライブラリという概念はかなり馬鹿げていると思います。実際、本当に1つ必要だと決める前に、おそらく2度考える必要があると私は主張します。ほとんどの場合、 FormEncode のようなフォーム検証ライブラリが必要な場合がほとんどです。それは本当にあなたがそれをどのように使いたいかに依存します。

私にとっては、メガフレームワークを使用しないので、軽量でピックアップと構成が簡単なもの、およびHTML/JS/CSSの通常の使用を妨げないものを選択します。

END免責事項

私は試しました ToscaWidgetsToscaWidgets 2FormishDeformWTForms およびFormEncode。私はそれらのどれも完璧に近いどこにもないと言う必要があります。彼らとの私の経験はここにあります:

  • ToscaWidgets、ToscaWidgets 2-非常に強力ですが、非常に複雑です。 ToscaWidgets 2の方がはるかに優れていますが、それでもまだかなりのATMです。セットアップにはかなりの忍者スキルが必要で、デフォルトのテンプレートをカスタマイズする必要があるときはいつでも、コードがかなり早く膨らむ傾向があります。
  • Formish/Deform-TWとほぼ同じくらい強力ですが、Formishは現在休止しています。また、Makoとは非常に緊密に結合されているため、Makoを使用しない場合はおそらく適切ではありません。 DeformはFormishを書き直したものですが、大量のZope依存関係をもたらします。カメレオンは、ZPT以外の他のテンプレート言語をサポートするという点でも、まだ十分ではありません。これらの2つのライブラリも、セットアップが特に簡単ではありません。
  • WTForm-非常にシンプルで邪魔にならず、開発面でも非常にアクティブです。上記のライブラリほど強力ではありませんが、通常、遭遇する可能性のある80%のユースケースを処理するので十分です。
  • FormEncode-2005年以来、試行錯誤を繰り返してきました。その十分にテストされたものには、多数のビルド済みバリデーターが付属しており、条件付き検証をサポートし、数十の言語で有用なエラーメッセージをサポートしています。また、値とエラーメッセージが事前に入力されたHTMLでフォームコードを生成する、非常にシンプルですが焦点を絞った機能も備えています。その不利な点には、時々非直感的なAPIとその絶対的なスパゲッティのような内部コードが含まれます。ただし、このライブラリは信頼性が高く、すべてのデータ検証のユースケースに非常によく適合します。これは、私がいつも戻ってきたものです。

2012年末の時点で、Python検証ライブラリーのGoogleおよびPyPIのクイック検索では、何百ものパッケージが返されます。アクティブな開発中のDjango拡張を割引して、1ダース以上の注目すべきものがあります。 JSON-Schema を使用してスキーマを定義し、Pythonデータ構造を一般的に検証できる傾向があるようです。これは、サーバーアプリケーション開発者が複数のチャネル(RESTful APIおよびHTMLフォーム)からユーザーデータを受け入れる動きを反映している可能性がありますが、検証ライブラリを1つだけ使用したいと考えています。

Pythonのリリースを考えると、3.3はspark 3.xをサポートするために既存のライブラリを移植する大規模な動きになる可能性がありますPython 3.x(その反対側は古いライブラリが停滞し、Python 2.x)とのみ互換性がある場合、Python 3.xをすでにサポートしているか、サポートを積極的に行っているライブラリを選択することをお勧めします。

最後に、フォーム検証ライブラリを選択する際のもう1つの大きな関心事は、有用なエラーメッセージを報告する機能です。これには、長期的に見ればエラーメッセージのローカライズの必要性が必ず含まれます。独自のエラーメッセージを簡単に提供できると、ライブラリを他のWebアプリケーションアーキテクチャと統合する複雑さがすぐにわかります。

有望な新進気鋭:

44
Y.H Wong

私はおそらく WTForms を選択します。

12
Marius Gedminas

このトピックは少し古いですが、私はこの目的のために書いてきたライブラリを恥知らずにプラグインすると思いました。これはHTMLフォームに限定されたものではありませんが、少なくとも部分的にはHTMLフォームで作成されました。

名前を付けたとき、私はあまりクリエイティブな気分ではなかったので、「バリデーター」は今のところ必要があります。ここに行きます: https://github.com/wilhelm-murdoch/Validator

4
Wilhelm Murdoch

それは、よりどのようなフレームワークを使用するかによって異なります。

あなたの仕事には、使いやすく、まだ「強力」である web2py-Framework を使用することをお勧めします。 デフォルトではフォームの検証web2py-book は無料です)があり、まさにあなたが望むことを行います:検証からhtmlの生成を分離し、これを自動的に行います、ただし、必要に応じてカスタマイズできます。

例:

def display_form():
    form=FORM('Your name:',
              INPUT(_name='name', requires=IS_NOT_EMPTY()),
              INPUT(_type='submit'))
    if form.accepts(request.vars, session):
        response.flash = 'form accepted'
    Elif form.errors:
        response.flash = 'form has errors'
    else:
        response.flash = 'please fill the form'
    return dict(form=form)

エラーをシリアル化することも可能ですが、それらの質問については、 web2py-group で質問するのが最善です。彼らはとても素敵で、あなたをとても早く助けてくれます。

それが役に立てば幸い!宜しくお願いします..

1
Joschua

それは、使用している基本的なフレームワークに依存します。

Djangoの場合、組み込みのフォームフレームワークが最適です。

ケイはZineのフォームシステムの拡張バージョンを使用しています

そしてtipfyはWTFormsを使用します。

これまでのところ、Djangoの組み込みシステムが最適です。

内部ではどのフレームワークを使用していますか?

0
iamgopal