ジャンゴ注意4 ---ルーティングシステム

Djangoのルーティングシステム
のシステムをルーティングDjangoはビューの先頭に一致するパスの定期的な整合との間の関係を知るために、以前にのみurls.py URLPATTERNの内容で知られている経路と機能の関係を指します。

URLconfのシステムで呼び出さジャンゴ・ジャンゴルーティングシステムは、Djangoのメンテナンスなどのディレクトリは、基本的にURLとあなたがそのビューを呼び出したいURLとの間のマッピングテーブルである。URLconfのジャンゴを見て公式文書の1.11がそれを言う方法です:

アプリでジャンゴのために、あなたは仕事にそれをしたい、だけでなく、アプリのさまざまな機能にアクセスするには、ブラウザのURLを設計する。URLアプリを設計するとき、それはどの我々は非公式に、PythonモジュールをビルドしますURLconfをいう。純粋なPython言語で書かれたのURLconf、関係.URLconfビュー機能に対応するURLパスのパターン(正規表現)は短くても長くてもよく、また、他のマッピング関係を参照することができ、動的に生成されてもよいです。

簡潔には、URLconfのはURLconfの設定ファイルとして、以下のプロジェクトで、内部とURLの間の対応の観点で書かれた、PYファイルである、と述べた。要求が入ってきたとき、それは設定ファイル.URLconfに機能します名前もカスタマイズすることができます。urls.py大会は、プロジェクトのルートディレクトリに初期のURLconfの設定ファイルとして採用しました。

URLconfのプロフィール

URLconfのファイル

インポートdjango.conf.urls URL
urlpatterns = [
URL(REGEX、ビュー、kwargsから=なし、名前=なし)、]
始まりのURLconfの設定ファイルでは、URLをインポートする必要があります。urlpatternsは、文書内の名前のリストを提供し、各要素は、例として、URLである場合
、薬学的に四つのパラメータURL:

正規表現は、正規表現であり、
ビューは、ビュー機能(クラス)の名前である
ビューに渡される追加のパラメータとしては、、kwargsから辞書である任意である
別名、後述する名前
文書は現在のサイトの後にそのような文書を生成しますURLconfのファイル。

定期的な試合詳細
マッチの定期的な部分、試合の開始は、一例として、一般的なGETリクエストの追加パラメータについては、プラス/後に、ドメイン名のルートディレクトリを表し、次のとおりです。

http://www.conyli.cc:8000/wp-admin/?article=1109
前WP管理者/のURLconfのライン広がりジャンゴ、Djangoのマッチング後のドメインURL前記ポートの一部、第一。パラメータは無視され、唯一のwp-adminの/セクションを示す「/」ルートディレクトリの一部を表します
以前のプロジェクトでは、のようなものを使用されています:

URL(R「^ item_edit /」 、views.item_edit)
このようなモードの前に入らないが、我々は今、特定の試合を見ることができます。

URLマッチングitem_edit /始め、同様のitem_edit /新/はの成功にマッチします

R '^ item_edit /'

完全一致は、唯一の「/ item_edit」と一致し、サブパスの成功が一致することはできません

R '^ item_edit / $'

任意のデジタル注文URLから番号を照合バッチは、一般的にコンテンツ管理システムで使用されます。

R '^本/ [0-9] {2,4} / $'

URLに/似本/ 333 / ABと一致するパケット、パケット部格納場合パケットに渡された値は、対応するビュー機能と一致することに注意してください。

R '^本/([0-9] {2,4})/([-ZA-Z] {2})/ $'

パケット名のマッチング、および同様のグループが、通常の規則に従って指定された各グループは、キーワードビュー機能によって渡されます

R「^記事/(?P [0-9] {4})/ $」
、いくつかの上記の例の下では、パケットは、URLの一部マッチ方法名前ない唯一の最も重要なケースの最後の2は、位置パラメータに応じて。ビュー自体(ビュー機能は、種々の方法を受ける必要があります。そのような位置パラメータ、デフォルト値または定義された受信したパラメータ*引数定義されるように)渡されたパケットの場合と命名正常一致キーワードよう部URLパラメータをビュー機能(** kwargsからパラメータを受信するためのキーワード又はキーワードに対応するビューパラメータを定義する関数)です。

URLconfとビュー機能を書くとき将来的には、文字列または特定のユーザー再利用可能にリンクなしのバックを渡す必要はありません、最高のは、可能な限りのURLconfシステムなどです。
集計のURLconfノートに:

URLconfが一致し、正常に反応して、実行の最初のビューを取って、上から下へと順に照合され、もはやリア一致しない
URLのか、文字の正規要素マッチングに対応するパケットは、も名前を付けることができ、キャプチャ、に部分を。マッチ値は、ビュー関数に渡されます
「/」を書いていない定期の先頭にパスのこの部分に属していない
そうでない場合、彼らは通常の二次エスケープの問題に直面するだろう、R転送フォーマット文字列を使用するのが最善である
ビュー関数に渡されるすべての定期的なキャプチャ値タイプは、ビュー内の文字列、ノート型変換関数である。
正規表現は、要求のタイプをチェックPOSTパスが同じ分析方法で全てである得ない
、Djangoはパスが中/終了していない小さな点があり、希望オートは、あなたがこの機能をオフにしたい場合は、あなたがsettings.pyで偽= APPEND_SLASHを追加する必要があり、このURLを一致させるために使用します。デフォルトはTrueで、「/」を追加します。非常に多くの使用します。

パケットパラメータが転送され、および表示機能は、純粋な柔軟性Pythonコードであるため、様々な機能がデフォルトのリターンパスを指定せずにバッチ処理URLなど実現することができる場合、最初のページの内容:

urls.pyで

django.conf.urlsインポートのURLから

から。インポートビュー

urlpatterns = [
URL(R '^ブログ/ $'、views.page)、
URL(R '^ブログ/ページ(?P [0-9] +)/ $'、views.page)、]

views.pyはnumのデフォルト値を指定することができ

ページDEF(リクエスト、NUM =「1」):
パス
の最初のページへの実現に直接入力して、URLおよび機能のif /ブログ/デフォルト戻っている、入力/ブログ/ 9 /最初の9つの関数を返します。

マッチングマルチパス
の開始時間は、彼らが標準では解決へのパスとして使用することができます満たしていることのURLconfの設定ファイルを述べた。、特定のパスをパスを解析するとき、我々はまた、ファイルを解析するために他のパスを導入し、現在の基準で続けることができます二つのルートパス分解能がモジュラーなり、簡単に内部使用のURLのようにして展開することを可能にする次のように導入例を含む転送経路には類似して解析。

django.conf.urlsから、URLを含めるインポート

urlpatterns = [
URL(R '^管理/'、admin.site.urls)、
URL(R '^ブログ/'、)( 'blog.urlsを'を含みます)、]

別のURLconfファイルの解析が始まるパス「ブログ/」に開催していきますですBlog.urls。

ビュー関数に追加のパラメータを渡す
学んだ最初の引数のURLの正規expression'veが完了している。2番目のパラメータは、登録するas_view()で、ビューまたはクラスAの関数であることが知られている。
今、第三引数を見てみましょう。
3番目のパラメータkwargsから辞書..あなたが合格しない場合は、渡されたパラメータは、辞書は、例えばビュー関数に渡されたキーワード引数に分解される場合は、関数の引数が渡されたビューを与えていない、タイプのオプションのパラメータです。

django.conf.urlsからURLをインポートする
から。インポートビュー

= urlpatterns [
URL(R&LT、views.year_archive、{ 'FOO': 'バー'} '^ブログ/(P [0-9] {} 4)/ $?')]
ここで、定期パケット名前によって、URLさらに辞書パラメータが仮定されているかの年の2019年の場合、パケットが一致し、views.year_archive機能受信したパラメータ:デフォルトの要求、年= 2019、FOO = 「bar」の特定のシナリオのみで使用されています。

URL名とURL逆引き
この最後の部分は、URLすなわち名=なしの四番目のパラメータである。この名前は、その期間のURLエイリアスの試合をプレイするために実際にある。
逆と呼ばれるものを理解するための例ではまず見て分析:
プロジェクトは、多くの場合、このように書かれる前に、テンプレートに、多くの場合、特にジャンプへのサイトのハイパーリンクの内部には、ハイパーリンクのすべての種類を記述します。

エントリー文書
、このジャンプを行うには、リンクの最大の問題は、ハードコードされ、ルートURLの試合で変更すると、すべてのテンプレートは、パスを書き換えるためにすべての必要性のパスで使用されている。
この時間は、パスにエイリアス名を使用する必要があります。逆解決するには、エイリアス指定されたURL、ハードコーディングされていないが
、次のようにurls.py読み取りの内容を変更します。

URL(R '^ move_add /' 、views.move_add、名前= "io_ticket")
、その後、次のように書かれたURLタグでテンプレートを使用しました:

<a href="{% URL "io_ticket" %}?id={{ item.id }}" class="btn btn-primary"> エントリー文書が
ページを開き、あなたはそのような修正を見ることができますurls.py move_add、その後、ページを更新し、元の関数からの変更を同期しますリンクタグがまだ、受け入れられmove_plusは、特定のページへのリンクを変更する必要はありませんです。

いわゆる逆解析、メカニズムのURLconfドキュメント要求を処理するためのビュー機能を見つけるために、URLを照合することによってだけではなく、提供され、また名前で一致するURLを見つけることができたコーピングの一種である。ただ、テンプレートにハードコーディングされた問題を解決しますが、バックエンドコード、機能身体機能及びリダイレクションプロセスを表示する、ハードコードされたパスが存在してもよい、今回は一般的なコード、リダイレクト時に逆引きを使用する方法について説明します。

逆分析方法は、例としてURLの例に戻り、ビューにリダイレクト機能で使用されます。

私たちは、逆引き参照機能をインポートする必要があります

django.urlsから逆輸入

=リバースREVERSE_URL(「io_ticket」)
リダイレクト(REVERSE_URL)
リターンパスは、逆引き参照することができます。

ハードコードされた絶対パスの問題を解決し、解決すべき問題は、エイリアスを対応する私の内部パスio_ticketが実際に死んだのパスが存在しているされて/これが低い場合には、正規表現のマッチング記号を使用していませんでした、/ move_add場合、URLは、それを取得する方法を決定するには?

URL(R '^ブログ/(?P [0-9] {2,4})/ (?P Djaogoは、逆の方法で直接アーカイブする場合、DjangoのエラーはのURLconfが、対応アーカイブによって見られるようNoReverseMatchに報告されますが、ここでのAに相当不確実性の正規表現URLを取得したい場合は、決定するために、この時間は、逆関数にパラメータを渡すことが必要である。 に必要な変更の上にリダイレクトコードセクション: [a-zA-Z]{2})$', views.year_archive,name="archive")

django.urlsから逆輸入

=リバースREVERSE_URL(「アーカイブ」、kwargsから= {「年」:2018、「タイトル」:「XB」})
リダイレクト(REVERSE_URL)
コードを解決パスエイリアスに必要とされる、エイリアスキーワードパラメータ経路に渡され、我々は、動的にURLされているように、関数の処理を逆にする必要があります。
ここで、URLは、パケットが指定されていない場合は、2番目のパラメータは、予備のタプルを渡す与えるために、パケットと命名され、前記位置値の送信順序、実際のURLを取得する。
テンプレートURLタグを、また、URLぼけに渡す{%のURL「アーカイブ」%}パラメータ値を使用することができます。

例に年の記事を達成するために、逆引きして表示を確認するには:

物品/ XXXX /そのような経路に一致するのURLconfプロファイル、xは任意の数であります

= urlpatterns [
URL(R&LT 'の記事^ /([0-9] {}。4)/ $'、views.year_archive、名前= 'ニュース年のアーカイブ')、]
テンプレートURLタグで使用してパラメータを渡しますパスを設定します。

逆引き参照URLを追加するためのテンプレートで使用するURLタグパラメータ

正規表現は、グループの別名を持っているので、年は実際のURLを取得し、変数yearvarのURLタグを渡されたので、URLは、別名の後ろに続く記事/ XXXX /、xxxxはすべての年year_list URLリンクのシリーズの一つです。あなたが表示された取得する何年記事わかっている場合、この機能は、実際には、すべてのパス、ビュー、関数はこのリンクを受け入れる年によって確立されます。

パースURLへのビュー機能には:

DEF(要求を)redirect_to_year:
年= 2018
リターンリダイレクト(引数=(年)、「ニュース年のアーカイブ」(リバース))
変数の逆の部分には、タプルを通過し、タプルの一つだけの要素は年間で、逆解析するURLパラメータと同等のが第一の位置の年を経過している。そのため、リダイレクトURLが記事/ 2018 /です。

逆引き参照を要約すると:

ボケない正規表現エイリアスに一致する
逆解析に{%URL名%}を使用してテンプレートに
逆解析に逆(名前)を持つコード
ファジーマッチングを有する、パケットのみ、名前の正規表現エイリアス
逆解析にテンプレート{%URL名の引数...%}を使用して
逆(名前、(ARG1、...とコード )) 逆解析に
ファジーマッチングを有し、パケット正規表現エイリアスと命名
テンプレートに逆解析に{%URL名の引数...%}を使用して、ここに記載されていない公式文書は、同じ変数名を使用して推定され、その後ビューを介して変数の値に渡す
逆(名前、kwargsから= {}で使用されるコードに ) 逆引き参照
URL名前空間
の名前空間URLと呼ばれるには、URLconfのは、2つのファイルが同じエイリアスが表示されている場合、あなたができることです:2つのエイリアスの構文「URL名の名前空間名」を区別するために、名前空間名は、アプリの名前です。
テンプレートで使用されます:

{%URL] app01:詳しく' PK = 12 PP = 99%}
使用されるタグ:

逆= V( 'app01:ディテール'、kwargsから= { 'PK':} 11)
DjangoはURLを処理する方法である
という結論、配列ジャンゴを処理するURLを見て、ジャンゴのGithubから翻訳された文書を変更します。

ユーザーが実行されるコードを決定するために、次のページのDjangoサイト、ジャンゴを要求した場合:

URLconfのDjangoは最初のルートモジュールを決定する必要があります。通常はROOT_URLCONF settings.py値セットであるが、もし着信のHttpRequestオブジェクトは、(ミドルウェアリクエスト処理によって提供される)のURLconfと呼ばれる属性を有し、その値は代わりROOT_URLCONFセットの使用されるであろう。
Djangoは全てのPythonモジュールとどこurlpatterns変数を見つけるためにロードします。これは)django.conf.urls.patternsする機能(でなければならない各要素はdjango.conf.urls.url例であり、Pythonのリストを返す。
ザDjangoはすべてのプロファイルから取得されたHTTPリクエストを、保持のURLconf成功したマッチの各正規表現、及び第一ストップを一致させるために、対応するビューを呼び出します。
:マッチが成功すると、Djangoは、対応するビューにパラメータとして渡された
のHttpRequestの一例
パケットが、渡された正規表現のパラメータの位置に応じて名前が付けられていない
パケットとキーワードで正規表現のパラメータの名前渡さ
出荷辞書をインスタンス化し、URLパラメータは、キーワードとして渡され、辞書には、正規表現キーワード引数のキーワードと同じ名前をグループ化し、指名した場合、あるパラメータが上書きされなくなります。
の過程で何の正規表現の一致、またはいずれかの場合ポイントは、Djangoは適切なエラー処理のビューを呼び出す例外をスローします。
トップ.Djangoを詳細に説明したシステムをルーティングするすべてのルーティングシステムは、正を通して非常に強力な、ファジーマッチング表現であり、同様の結果を表示する関数法にパラメータを渡すと、URLのディレクトリシステムを確立することができ、これらのURLの規則的な分布異なるビューを処理するための機能。

ビューの観点から、ルーティングシステムは、処理範囲表示機能を拡張する。ルーティングシステムを見る前に、我々は、特定のURLアドレスにビュー機能対応を記述し、システムをルーティングすることによって、ビュー機能は、URLアドレスの数を操作することができます。

あなたが特定し、オーサリング・テンプレートを低減させるためにハードコードされたキャリー・パラメータは、ビュー関数に渡すことができると同時に、あなたはパラメータを使用して、書き込みGETリクエストを省略することができ、統一されたURLを記述することができないことをお互いにポイントにドメイン内で、逆解析を適用することにより、複雑。
サイトを作成する際に、事前に設計されたルーティングシステムは、全体のディレクトリサイトの同等の、非常に重要である。明確にビューを作成するためのデザインテンプレートをルーティング構造化し、Djangoプロジェクトを書くときに、将来的に乗数効果を再生し、システムのルーティングを過ごすためにしてみてください開発作業を容易にするための高度な機能。

おすすめ

転載: www.cnblogs.com/bmxm/p/11976109.html