[ご注意]ジャンゴ・ジャンゴクイックスタートセクション4:フォームと汎用ビュー

[ご注意]ジャンゴ・ジャンゴクイックスタートセクション4:フォームと汎用ビュー 

 

上の注意公式文書技術のブログ、エキスキー情報、および記録ノートは、公式ドキュメント・ルーチンを参照してください。

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

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

 

Djangoは、公式ドキュメントをはじめ:パート4:フォームと汎用ビュー

 

ディレクトリ

1.フォームフォーム

コードの重複を減らす:2.一般的なビュー


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開発は、一般的な状況です。

  1. URLのパラメータに応じてデータベースからデータを取得し、
  2. テンプレートファイルをロードし、
  3. ただ、テンプレートをレンダリングし、このテンプレートに戻るためにデータを使用しています。

このような状況では特に一般的であるため、Djangoは「と呼ばれるショートカット、提供汎用ビュー」システムを。

 

代わりに、共通のビューモードを使用しての元のコードは、以下のステップの変換を完了するために行われる必要があります。

  1. URLconfを変換します
  2. 古いビューのいくつかの不要になったを削除します。
  3. 新しいビューは、Djangoの共通のビューに基づいて導入されます

(注:開発中の一般的なビューを使用するかどうかを判断するために始めるべきではなく、途中で再構築されました)

 

汎用ビューをインポートする必要があります。

django.viewsから一般的なインポート

 

一般的なビュー:(彼らは親クラス継承されているとして)

 ListView :用スタンド「ディスプレイオブジェクトのリスト。」ListViewの汎用ビューはテンプレートと呼ばれるデフォルトの使用属性は、テンプレート名を指定するために使用されます。<app name>/<model name>_list.htmltemplate_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の使い方です。汎用ビューの詳細について、参照  文書の一般的な見解を  。

 

 

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

おすすめ

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