[注記]ジャンゴ形

主に基づいてノート公式文書、メモを取ると、ドキュメントへのリンクを含んでキーポイント、キー公式を抽出します。公式ドキュメントを参照してください。

公式文書:Djangoのドキュメント 

推奨ブログ:Django2.2チュートリアル

ディレクトリ

1.HTMLフォーム

2.Djangoの形で

処理やレンダリング形態の例

3. Djangoのフォーム

Formクラスの3.1。調製

3.2。ビューの契約

3.3。テンプレート処理

4.詳細Formクラス

4.1。詳細なフィールド

4.2.Widgetコントロール

4.3。フィールドデータ

5.フォームテンプレート


 

Djangoはフォームを作成し、フォームデータを処理する助けに豊富なフレームワークを提供します。

フォームの公式文書フォームを、文書の基本的な部分:  概要  |  フォームAPI  |  ビルトインフィールド  |  ビルトインウィジェット

 

1. HTMLフォーム

HTMLにおいて、フォームは、  <form>...</form> その中にユーザ入力ラベルを収集してもよいし、サーバーにデータを送信します。

HTMLフォームには、二つのものを指定する必要があります。

  • 目的地:URLにより送信された宛先ユーザデータ
  • 方法:データを送信するためのHTTPメソッドを使用します

Djangoの管理サイトのログインフォームのHTMLの例に:

<form action="/admin/login/?next=/admin/" method="post" id="login-form">

    <input type='hidden' name='csrfmiddlewaretoken' 
         value='NNHZaDVJGduajNMECXygKZkAt8vyEcw9HS2qm2Vdf7brDZrA0qK1R0I7M2p3TKcs' />

    <div class="form-row">
        <label class="required" for="id_username">用户名:</label> 
        <input type="text" name="username" autofocus maxlength="254" required id="id_username" />
    </div>

    <div class="form-row">
        <label class="required" for="id_password">密码:</label> 
        <input type="password" name="password" required id="id_password" />
        <input type="hidden" name="next" value="/admin/" />
    </div>

    <div class="submit-row">
        <label>&nbsp;</label> <input type="submit" value="Log in" />
    </div>
</form>
  • フォームデータ  <form> の 属性は、 URLを指定し、フォームを送信する必要があるブラウザを教えてくれ。 action
  • method プロパティは、 HTTPメソッドを指定する-など  post ;(GETおよびPOST
  • フォームは、多くの含ま  <input> 要素type="text"ユーザー名、type="password"パスワードtype="submit"、「ログイン」ボタンのを。
  • あなたがクリックすると<input type="submit" value="Log in">要素を、データが指定されたURLに送信されます。

 

通常の状況下で、我々はHTMLページに手動で行う必要があり、書き込みラベルおよび他の要素は、その中に形成します。しかし、これはあまりにも面倒で、Djangoのフォーム機能は、作業の多くを簡素化し、自動化することができ、上記の

 

2. Djangoのフォームで

Djangoのフォームは、3つの異なる部分の処理が伴います。

  • 次のステップを描画するために、準備したデータを再編成
  • データのためのHTMLフォームを作成します。
  • 受信してデータ処理し、クライアントによって送信されたフォーム

あなたは  できる  達成するために、手動でコードを書いたが、Djangoは、あなたがすべての作業を行うことができます。

Djangoのフォーム書面、我々はモデル系において非常によく似たモデルを記述します。モデル、フィールドデータテーブルの代表、およびの形の代表的なフィールドを形成する<form>1つの<input>要素Djangoは、システムのコアコンポーネントを形成さ  Form 基づきます。

 

処理やレンダリング形態の例

ジャンゴでオブジェクトをレンダリング、通常我々:

  1. ビューでそれを得る(例えば、データベースから削除)
  2. テンプレートコンテキストにそれを渡します
  3. HTMLタグにそれを拡張するためにテンプレート変数を使用します

テンプレートでフォームをレンダリングほとんどその他の型のオブジェクトをレンダリングするように、いくつかの重要な違いがあります。

 

3. 使用Djangoのフォーム

通常3つの段階:

  1. 書かれたフォームクラス
  2. ビューの契約
  3. テンプレート処理

 

あなたは、ユーザーの名前を取得するには、サイト上で簡単なフォームを作成するとします。テンプレート内のコードのようなものを使用する必要があります。

<form action="/your-name/" method="post">
    <label for="your_name">Your name: </label>
    <input id="your_name" type="text" name="your_name" value="{{ current_name }}">
    <input type="submit" value="OK">
</form>

フォームに関連する関連ニーズは、フォーム内の関連する治療を行うと、その検証を行います。使用Djangoのフォームは、作業のほとんどを超える完成します。

 

3.1.编写Form カテゴリ

上記形態によって提供されるDjangoのフォームクラスは、HTMLで手動で記述する必要をなくし、自動的に生成することができます。

現在では、アプリ内の新しい作成するforms.py(のようなファイルviews.pymodels.pyなど):

# forms.py
from django import forms

class NameForm(forms.Form):
    your_name = forms.CharField(label='Your name', max_length=100)

まず、それはHTMLでだ  <input> の追加  maxlength="100" (これは複数のユーザ入力文字列のこの数より初めてのブラウザを防ぐことができます)。第二に、それはまた、ジャンゴ、認証するためにデータの長さ(ある、サーバー側の検証)におけるブラウザフォーム上パスを受け取ることになります。

 

注意:

  • 事前モジュールでフォームのインポート
  • すべてのクラスはforms.Formフォームクラスを継承しなければなりません
  • 各フォームは、言語HTMLの一種に対応するようなフィールドタイプCharFieldですとして独自分野有する<form>フォーム要素要素。この設計とDjangoのモデルシステムは非常に似ています。
  • 設定用のタグラベル命令の例
  • max_length100長さの最大限界。また、二つの役割、100個の以上の文字を入力することはできませんユーザーを制限するために、ブラウザで1ページを果たしている、第二には、バックエンドサーバーに100以上にすることができないユーザー入力の長さを検証することです。
  • Djangoは各インスタンスが内蔵された形成  is_valid() 方法と、受信したデータが有効であるかどうかを確認しますすべてのデータが正当なものである場合、メソッドはtrueを返し、すべてのフォームデータは、それが呼ばれるダンプcleaned_dataプロパティが辞書型のデータで、プロパティを。

次のように読み込み、実際のHTML要素にレンダリング上記のフォーム、:

<label for="your_name">Your name: </label>
<input id="your_name" type="text" name="your_name" maxlength="100" required />

それは含まれていないことを注意<form>ラベル自体と送信ボタンを!なぜ?CSS、JSおよび他の同様のブートストラップ・フレームワークを埋め込まれた独自のアクションとフォームを制御することが容易!

 

3.2。ビューの契約

フォームデータは、ビューによって処理され、このリリースの一般的な形態は、同じロジックの一部を再利用するための図と同じです。

フォームを処理するためには、それは我々がリリースされたURLを表示どうなるかに対応するインスタンス化する必要があります。

# views.py

from django.shortcuts import render
from django.http import HttpResponseRedirect

from .forms import NameForm

def get_name(request):
    # 如果form通过POST方法发送数据
    if request.method == 'POST':
        # 接受request.POST参数构造form类的实例
        form = NameForm(request.POST)
        # 验证数据是否合法
        if form.is_valid():
            # 处理form.cleaned_data中的数据
            # ...
            # 重定向到一个新的URL
            return HttpResponseRedirect('/thanks/')

    # 如果是通过GET方法请求数据,返回一个空的表单
    else:
        form = NameForm()

    return render(request, 'name.html', {'form': form})
  • GETメソッド要求ページでは、フォームの空のインスタンスを作成して、テンプレートのレンダリングのコンテキストに配置し、ユーザーがデータを記入できるように、空のフォームを返さ。
  • POSTメソッド、フォームデータ、及び検証のための。
  • データは、法的および実行を継続するために、通常のビジネスロジックに従ったものである場合には、
  • 正当でない場合は、フロントページの以前のデータにフォームを返し、ユーザー変更

公式ドキュメントを参照してください。

3.3。テンプレート処理

Djangoテンプレート、我々はあなたが完全なHTMLページを取得することができ、次のプロセスを押す必要があります:

<form action="/your-name/" method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="Submit">
</form>

Djangoテンプレート言語を介してすべての属性とフォームフィールド  {{ form }} のHTMLタグへの溶液バッグ。

注意:

  • <form>...</form>独自のラベルを書き込むには、
  • POSTメソッドを使用するときは、追加する必要があります{% csrf_token %}CSRFセキュリティメカニズムを処理するためにタグを。
  • {{ form }}Djangoは、私たちが物事の上に何をすべきかである、あなたのためのフォームラベルの他のすべての要素を代表して生成されました。
  • 手動で追加するボタンの必要性を提出してください!

これらはあなたが知る必要があるエントリです。

 

4. 詳細Formクラス

モデルとフォーム

フォームをする場合は実際には、直接Djangoのモデルを追加または編集するために使用して、  のModelForm  それはに基づいて行われますので、あなたは、時間、労力、地方のコードを保存することができ  Model 、そのプロパティフォームクラスで対応するフィールドを構築します。参考:モデルからフォームの作成

学び:結合および非結合フォームのインスタンスを

4.1。フィールドのコメント

実際には、Djangoのフォームモジュールには、我々は、フォームフィールドの多くを構築しました。

次の形式を参照してください。

from django import forms

class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    message = forms.CharField(widget=forms.Textarea)
    sender = forms.EmailField()
    cc_myself = forms.BooleanField(required=False)

この場合、私たちのフォームには4つのあり subject :フィールドを  message 、  sender と  cc_myself 。Typeフィールドは、3使用 CharField 可能な:、  EmailField と  BooleanField 。

フィールドタイプを参照の完全なリスト フォームフィールド  。

 

4.2。ウィジェットのコントロール

各フィールドは、対応するフォーム有する  制御クラス  のような入力要素のHTMLフォームの種類に対応した制御クラスを有するAを  <input type="text"> 。HTMLの実際の使用に必要な入力のどのようなタイプの、あなたはDjangoのフォームフィールドで適切なフィールドを選択する必要があります。たとえば、に<input type="text">、あなたはいずれかを選択することができますCharField

4.3。フィールドデータ

どんなにどのようなフォームの提出データ、呼び出したら、  is_valid() 検証が成功した(  is_valid() リターン  True )、検証済みのフォームデータが中に配置されます  form.cleaned_data 辞書。あなたはからできるform.cleaned_dataすべてのフォームデータ辞書を読んで。

ビュー内のデータ処理形態例:

# views.py
from django.core.mail import send_mail

if form.is_valid():
    subject = form.cleaned_data['subject']
    message = form.cleaned_data['message']
    sender = form.cleaned_data['sender']
    cc_myself = form.cleaned_data['cc_myself']

    recipients = ['[email protected]']
    if cc_myself:
        recipients.append(sender)

    send_mail(subject, message, sender, recipients)
    return HttpResponseRedirect('/thanks/')

 

5. 使用フォームテンプレート

簡単に言えば、フォームインスタンスのコンテキストテンプレートをすることができます。フォームは、このコンテキストで呼び出された場合したがって、  form それは、  {{ form }} それが適切なレンダリングする  <label> と  <input> 素子。

 

フォームのレンダリングフォーマット

{{ form }}テンプレート言語は、フォームが簡単にHTMLページにレンダリングすることができます。用  <label> /  <input> 右だけでなく、他の出力オプション:

  • {{ form.as_table }} フォームのレンダリング要素にテーブルとして各入力フレーム<tr>ラベル
  • {{ form.as_p }} フォームに包まれた各入力ボックス<p>タグ内 
  • {{ form.as_ul }} 各入力フレームのために、リストとしてレンダリングされたフォーム要素<li>ラベル

注意:

  • あなたは自分自身の外側の層を提供しなければならない  <table> か  <ul> の要素を。
  • 出力の形式は  ありません  外含める  <form> ラベルと  submit コントロールを。これらは自分で用意する必要があります。

公式文書とより多くの情報の例としては、以下を参照してください。フォームのレンダリングフォーマットを

 

フィールドマニュアルをレンダリング

直接は{{ form }}十分に良いですが、多くの場合も、追加の制御の形式で入力要素にする必要がありますBootstarpsフレームワークを導入するために、このような使用CSSやJSのよう満たす要件に失敗します。

あなたはできる{{ form.name_of_field }}各フィールドを取得し、それぞれのレンダリング。

タグラベルにも使用することができますlabel_tag()生成する方法を。

公式ドキュメントを参照してください。

 

 

単なる基本的な内容よりも、より多くの公式ドキュメントを詳細に説明。フォームの公式文書フォーム:  概要  |  フォームAPI  |  ビルトインフィールド  |  ビルトインウィジェット

 

- - -終わり - - -

公開された50元の記事 ウォン称賛10 ビュー6586

おすすめ

転載: blog.csdn.net/qq_23996069/article/details/104966311