[ご注意]ジャンゴ・ジャンゴクイックスタートセクション4:フォームと汎用ビュー
上の注意公式文書や技術のブログ、エキスキー情報、および記録ノートは、公式ドキュメント・ルーチンを参照してください。
完全な公式文書:Djangoのドキュメント
推奨ブログ:Django2.2チュートリアル
Djangoは、公式ドキュメントをはじめ:パート4:フォームと汎用ビュー
ディレクトリ
1.フォームフォーム
テンプレートファイルの場合、ポイント:
- formタグ内のアクションが送信したい先のURLで、この方法は、データの提出を表し、通常は投稿して取得します。あなたは、サーバー側のデータ、使用方法=「POST」を作成するフォームを変更する必要がある場合
forloop.counter
示すfor
ラベルが何度も循環しています。forloop.counterが特別にあなたの現在のサイクルの数を示すために設けられた可変Djangoのテンプレートシステムで、サイクルは一般的に対数スケールを発注した項目を追加するために使用されます。- あなたが(データを変更する効果を持っている)POSTフォームを作成するときは、慎重にクロスサイトリクエストフォージェリする必要があり、CSRFに言及しました。Djangoは非常に使いやすい、そのシステムへの防御を持っています。要するに、POSTフォームのすべての内部URLを使用する必要があります テンプレートタグを
{% csrf_token %}
。(ラベル名は限りフォームがフォームであるように、任意の位置に、固定フォーマットを変更することはできません。この方法では、道の形に便利なHaoshi提出フォームであるが、それはAJAXの方法を使用してデータを提出した場合、このメソッドを使用していない持っています。)
送信されたフォームデータは、ビュー内で処理された視点。
-
request.POST
辞書ライクオブジェクト提出されたデータのキー名へのアクセスを可能にしています。たとえばrequest.POST['choice']
で返される文字列の選択肢のIDを選択します。注:request.POST
値は常に文字列です。 -
Djangoはまた、同じ方法で提供
request.GET
GETデータにアクセスするため。 -
あなたがいる場合
request.POST['choice']
、データを提供していないchoice
、POSTは、につながりますKeyError
。PS:通常、私たちは、このような例外を防ぐためにデフォルト値を与える、例えばrequest.POST[’choice’,None]
、いずれもすべての問題を解決しません。 -
HttpResponseRedirect
一つだけの受信パラメータを:ユーザのURLにリダイレクトされます。注:POSTデータを正常に処理した後、良い習慣を維持する必要があり、常にHttpResponseRedirect返します。以下のような:return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))
-
reverse()
機能。この関数は、私たちにビュー機能でハードコーディングされたURLを避けることができます。それは与えるために私たちを必要とし 、あなたがジャンプするビューの名前 とのビューを提供する必要性を考慮に対応するパターンURL パラメータ(渡されたデータを)。(例:上記のリダイレクトコードの後にpolls:results
対応する図、およびquestion.id
に渡す方言用語は、さらにそこにルートに対応するライブビューをスローすることです。)
コードの重複を減らす:2.一般的なビュー
Web開発は、一般的な状況です。
- URLのパラメータに応じてデータベースからデータを取得し、
- テンプレートファイルをロードし、
- ただ、テンプレートをレンダリングし、このテンプレートに戻るためにデータを使用しています。
このような状況では特に一般的であるため、Djangoは「と呼ばれるショートカット、提供汎用ビュー」システムを。
代わりに、共通のビューモードを使用しての元のコードは、以下のステップの変換を完了するために行われる必要があります。
- URLconfを変換します。
- 古いビューのいくつかの不要になったを削除します。
- 新しいビューは、Djangoの共通のビューに基づいて導入されます。
(注:開発中の一般的なビューを使用するかどうかを判断するために始めるべきではなく、途中で再構築されました)
汎用ビューをインポートする必要があります。
django.viewsから一般的なインポート
一般的なビュー:(彼らは親クラス継承されているとして)
ListView
:用スタンド「ディスプレイオブジェクトのリスト。」ListViewの汎用ビューはテンプレートと呼ばれるデフォルトの使用属性は、テンプレート名を指定するために使用されます。<app name>/<model name>_list.html。template_name
DetailView
:用スタンド「オブジェクトの特定のタイプの詳細ページ。」デフォルトでは、DetailView
一般的なビューを使用して参照され<app name>/<model name>_detail.html
たテンプレート(:例えばポーリング/ detail.htmlを)。template_name
属性には、テンプレートの名前を指定するために使用されるデフォルトのテンプレート名の代わりに使用が自動的に生成されます。
class DetailView(generic.DetailView):
model = Question
template_name = 'polls/detail.html'
- 各汎用ビューには、それが動作しますどのモデルかを知る必要があります。これはによって行われ
model
プロパティを提供します。 DetailView
名前のキャプチャはURLから期待する"pk"
主キーの値。(ですから、例えば一般的なビューのquestion_id
変更pk
)。
クラスビューは、第一印象があり、より高度なDjangoの使い方です。汎用ビューの詳細について、参照 文書の一般的な見解を 。