、MTVモデル
MTVの1.Djangoを表します。
モデル(モデル):データベースと関連するビジネスオブジェクトとオブジェクトがデータベースに責任がある(ORM)
テンプレート(テンプレート):すべてのHTMLファイルを置きます
テンプレートの構文:目的は独立変数(データベースの内容)であるHTMLページに埋め込まれてどのように巧みに
ビュー(Viewは):ビジネスロジックを担当し、かつ適切な時期にモデルとテンプレートを呼び出します
また、DjangoのURLディスパッチャがあります。これは、ページ要求のURLの役割は、ビュー、ビューの異なる治療に送信し、適切なモデルとテンプレートを呼び出しているです。
2、関連するコマンド
ジャンゴ-adminのstartprojectのプロジェクト名:Djangoプロジェクトを作成します。
プロジェクト内のアプリケーションを作成しますのpython3 manage.py startappのAPPNAME
ファイル名を指定して実行:のpython3 manage.pyのrunserver IP PORT
3、URLの設定(のURLconf)urls.py
機能:ビュー機能を確立し、URLマッピング関係
URL(正規表現(ルール)、ビュー機能、[オプション])
URLます:http://127.0.0.1:8080 /ブログ/記事/ 2003/05、A = 1&B = 2?
マッチ文字列:URLのユーザ入力に対応するパス/ブログ/記事/ 2003/05
注意:
(1)ある現象の出現の場合、一致するルールの競合、最初の一致URLをカバー
(2)未知のパケット:URL(R '^記事/(\ dの{4})/(\ dは{2})$'、views.year_month)、#年(requset、1990,12)位置パラメータに従って
(3)知られているパケット:URL(R '?? ^記事/(P <年> \ D {4})/(P <月> \ D {2})$'、views.year_month)、#年(requset位置パラメータによって、年= 1990、月= 12)
(4)URL分发:URL(R '^ブログ/'、)( 'blog.urls' を含めます)
補足ビュー機能
1、ビュー機能:これは、2つのオブジェクト(描画HttpResponseオブジェクト内のソース)を含むようでなければなりません
リクエストオブジェクト:-----「すべての情報を要求
HttpResponse:-----「応答の内容(文字列)
ます。http://127.0.0.1:8000 / login.htmlとユーザー= ASD&PWD = ASD 2、データを送信するための要求を取得しますか?
キー:データ要求を含む
。1、`` request.GET`` データは{}空の辞書ではない場合、データは、GET要求
、2 request.POSTの:データが空の辞書は、{}でない場合、データのPOST要求
。3、要求.method GETまたはPOST ::要求モード
4、複数の値をキー要求:request.POST.getlist( "趣味")
。5、request.path :要求パス(パスが取得する、データを取得していません)
リクエストURL:HTTP://127.0.0.1:8000 / index.htmlに/ 23であるA. 1 =?
パス:request.path:/index.html/23
。6、 request.get_full_path() :リクエストパス(データパスと取るだろう)への
要求URL:HTTP://127.0.0.1:?8000 / index.htmlに/ 23 A = 1
request.get_full_path():? / index.htmlに/ 23 A = 1
第三に、との違いは、機能をレンダリングし、機能をリダイレクト
レンダリング:のみページのコンテンツに戻りますが、第2の要求を送信しません。
リダイレクト:2番目の要求は、URLの更新を再生
第四に、逆解析
使用Djangoプロジェクトでは、一般的な要件は、生成されたコンテンツに埋め込まれた(とビューは、ユーザーのURLに表示される、など)や、ナビゲーション処理サーバ(リダイレクト)のためのURLの最終形態を得ることです。
有効期限が切れある程度のURLにつながるしやすいので、強い願いは、URL(面倒、エラーが発生しやすいと拡張可能ではない)、または無関係な特殊なURL生成機構のURLconfを設計は、ハードコードにありません。
言い換えれば、必要とされるのは、機構DRYです。他のほとんどの中で、それはまた、自動的に検索し、時代遅れのURLを置き換えるために、プロジェクトのソースコードを横断することなく更新することができURLを設計することができます。
URLの最初の値を得るために必要なタイプ(位置パラメータ、キーワードパラメータ)やその他の情報は、情報が識別(名前など)そのビューを処理していると思うビューの正しいURLパラメータを見つける必要があります。
Djangoは方法は、URLマッピングURLのデザインが唯一の場所であるようにすることです提供します。あなたは、あなたのURLconfを記入し、両方向にそれを使用します:
- URLリクエストのユーザー/ブラウザを起動よると、それは正しいDjangoのビューを呼び出し、URLからその必要なパラメータの値を抽出します。
- ビュー識別子ジャンゴと、その値は、パラメータに関連付けられたURLが渡されます。
最初の方法は、前の章で説明している使用することです。第二の方法は、URLは、リバース、リバースURLのクエリまたは簡単なURLの逆引きが一致する、逆引き参照URLと呼ばれています。
さまざまなレベルのために、必要なURLは、Djangoは逆引き参照URLのためのさまざまなツールを提供しています。
- テンプレートで:URLテンプレートタグを使用してください。
- Pythonのコードでは:使用して
django.core.urlresolvers.reverse()
機能を。 - プロセスモデルDjangoの例に関連したより高いレベルのコードで:使用
get_absolute_url()
方法。
例:
次のURLconfを考えてみます。
django.conf.urlsからURLをインポートする から。インポートビュー urlpatterns = [ #... URL(R '^記事/([0-9] {4})/ $'、views.year_archive、名前= 'ニュース年のアーカイブ')、 #... ]
ここでの設計に応じて、アーカイブされたURL指定した年のnnnnが該当します/articles/nnnn/
。
あなたはそれらを得るためにコードテンプレートの次のメソッドを使用することができます。
<aのhref="{%のURL'news-year-archive' 2012 %}"> 2012アーカイブ</a>の <UL> {year_listの%でyearvarため%} <LI> <のhref = "{%のurlのニュース年間のアーカイブ」yearvar%} "> {{yearvar}}アーカイブする</a> </ LI> {%ENDFOR%} </ UL>
Pythonのコードでは、そのように使用:
django.core.urlresolversから逆輸入 HttpResponseRedirect django.httpインポートから デフredirect_to_year(リクエスト): #... 年= 2006 #は... HttpResponseRedirectを返す(引数の=(年、 'ニュース年のアーカイブ'(リバース) ))
何らかの理由で年間のアーカイブ記事のURLをリリースすることを決定した場合は調整する必要があり、その後、あなただけのURLconfの内容を変更する必要があります。
いくつかのシナリオでは、一般的な図であり、URLとビューの間に1つの関係に多くあります。とき逆引き参照URLこれらのケースについては、ビューの名前だけでは十分ではありません。
例:
分析:私たちは、ハードコードされた書き込みを開始したい、死んで書くためにジャンプするアクションのパスです。しかしなど淘宝網、オオヤマネコ、のように定期的に、あなたのページのURLパスは随時変更されます,,新しいものに更新されます。商品の特に数が多い場合でも、あなたは、これは面倒である、変更のサーバーに移動する必要があるので、私たちは問題を解決するためのメカニズムはありませんか?それから私は、次のようなアプローチに基づいて解決しました。ライブの書き込みへのURLパスを入れてください。
1、最初はURLエイリアスを再生します。
ページ内の要素をクリックした場合2、それから{%のURL「エイリアス」%}に書かれたlogin.htmlとで、見て、それはlogin.htmlと,,,私は循環させたのコース,,なりますになりますテスト/ login.htmlと
3は、あなたがあなたの定期的に変更することができ、そして、彼がなくなっているので、別名によると、影響を与えません。
urls.py
login.htmlと
結果の要素を表示します。
利点がありません:関係なく、あなたがエイリアスを作成する場合は、URLと一致することをどのように変化しますか。HTMLテンプレートの構文では、それは関係なく、あなたは、URLがすべての権利どのように変化するか、将来に対応していないそのURLエイリアスに行きます、実現、彼女は生きて書いた、彼らはハードコードされたように書き始めました。