2009-07-15 10 views
9

ちょうどdjangoを使い始めました。私はフォームに遭遇し、どのフォームがフォームを検証する良い方法であるかを知る必要があります。それはジャンゴのフォームを使用しているか、私たちはそれを行うにはJavaScriptやいくつかのクライアント側のスクリプト言語を使用する必要がありますか?djangoのフォーム検証

+3

タグ 'django'は' django-forms'のようなサブタグよりも多くの視聴者を獲得します。主なプラットフォーム/言語( '.net'、' java'、 'django'など)に少なくとも1つのタグを含めるようにしてください。特に、5つのタグの制限に達していないときは、 – Zifre

答えて

16

サーバー側でフォームを検証する必要がありますが、クライアント側の検証はユーザーの利便性だけです。

Djangoフォームには、フォームフィールドが正しくないかどうかを示す変数form.errorsがあります。

{{form.name_of_field.errors}}は、間違って入力された各フィールドの個々のエラーを表示できます。ここで詳細を参照してください。

http://docs.djangoproject.com/en/dev/topics/forms/

+4

ドキュメントに書いていないことの1つは、フォーム全体に当てはまるエラーだけを取得する場合の{{form.non_field_errors}}の存在です。 –

+0

はい、私はドキュメントがたくさんのものを見逃しているか、単に詳細には出てこないのがわかります。フレームワークが発展するにつれて、ドキュメントも同様に発展してくれることを願っています。 – AlbertoPL

+0

Albertoが言ったことを繰り返し述べる:クライアント側の検証は検証ではない。誰でもPOSTまたはGETリクエストを作成することができます。クライアント側の検証から得られる唯一の実際の恩恵は、ユーザーにとって「Web 2.0 AJAXy」の感覚ですが、サーバー側で行われる検証ではありません。 – ShawnMilo

5

JavaScriptを介してクライアント側でフォームを検証することができますプラグイン可能なDjangoのアプリ(django-ajax-forms)があります。しかし、AlbertoPLによれば、クライアント側の検証はユーザビリティ対策としてのみ使用してください(たとえば、登録ページを再読み込みせずに希望のユーザ名を既に取得していることをユーザに伝える)。ほとんどの場合、JavaScriptを無効にするなどの単純な方法で、クライアント側の検証を回避するためのあらゆる種類の方法があります。

一般的に言えば、外部から届いたすべてのデータは、検証されるまで障害があるものとみなします。

4

django-floppyformsがちょうど来ました。これはデフォルトでクライアント側の検証を行うようです。彼らはデフォルトでクライアント側の検証をサポートするHTML5を使用します。ブラウザでHTML5がサポートされていない場合でもjavascriptを使用しているかどうかはわかりません。私はまだそれを試していない。 -floppyformsをDjangoのための

リンク:DocumentationGithub

0

あなたがこれを行う必要がありますがJSです。 This appは、フォームをparsley.jsと統合して、正しいdata- *属性を持つフォームに自動的にタグ付けします。

2

ブートストラップを使用している場合は、必要な属性をフォームフィールドに追加するだけで済みます。例えばprogrameフィールドがある場合、あなたはそれが好きで検証することができます:

forms.pyで:

programme = forms.ChoiceField(course_choices,required=True, widget=forms.Select(attrs={'required':'required'})) 

注:これは、そのフォームのご.htmlページ内のファイルをブートストラップするためにリンクすることが必要です。