Django--ルーティング層、擬似静的なページ、仮想環境、ビュー層

 

ルーティング層:

  ルートが一致した場合、最初の引数は、ルートマッチング、オーダールーティングが底一致に上から一致したときに正規試合のルールによるとちょうど一致する、一致することを意味する正規表現であります1は、次の機能を実行しません、対応する機能を実行します。

= urlpatterns [ 
    URL(' ^ $ '、views.home)、  ホームルート 
    URL(R ' ^ ADMIN / ' 、admin.site.urls)、
    URL(R ' ^テスト/ ' 、views.test)、
    URL (R&LT ' ^ test_add / ' 、views.test_add)、
    URL(R&LT ' ^ REG / ' 、views.reg)、
    URL(R&LT ''、views.error)、  サイトがルーティング存在しない
]
 #の最初のパラメータこと注,,ダウンからマッチングシーケンスに従ってルールに一致する正規表現が一致した後、対応するビュー機能がすぐに実行される

(他の経路と一致するように、特にルーティング場合は、配置されている経路の位置を考慮した場合どちらかの)ルートの位置やルート変更のルートを置き換えます

  不明グループ

    位置パラメータとしてコンテンツにマッチ括弧正規表現は自動的にビューに対応する関数に渡されます 

URL(R&LT ' ^テスト/(\ + D)/ '、views.test)、1つ以上のデジタル#と一致
デフテスト(要求、A):
プリント(a)の
リターンはHttpResponse( "テスト")

  

  有名なグループ化   

    キーワードなどのコンテンツにN括弧表現マッチテーブルを自動的に表示する機能に対応するパラメータに渡されます。 

URL(R ' ?^テスト/(P <年> \ D +)/ ' 、views.test)、
 デフテスト(要求、年):
     プリント(年)
     のリターンはHttpResponse(" テスト"

 

   注:未知のパケットと既知パケットを混在させることはできません、未知の複数のパケットを使用することができる、または既知の複数のパケット

 

  逆分析:動的に対応するパス名に従って得

    不明なパケット逆引き参照:

      URL(R '^テスト/(\ dは+)/'、views.test、名前= 'リスト')

      バックエンド:

        プリント(( 'リスト'、引数=(10))逆)

      フロントエンド:

        {%URL 'リスト' 10%}

      

      user_list = models.User.objects.all()


      URL(R '^編集/(\ dは+)/'、views.edit、名前= '編集')

      フロントエンドテンプレートの構文:      

        {user_list%でUSER_OBJ用%}
          <a href='edit/{{ user_obj.pk }}/'> </a>の
        {%ENDFOR%}

      ビュー機能:

        django.shortcutsから逆輸入
        :デフ編集(リクエスト、edit_id)
          URL =リバース( '編集'、引数の=(edit_idを、))

      テンプレート:

        {%のURL [編集] edit_idの%}

    有名なグループ化の逆引き参照:

      バックエンド:

        #バックエンドの有名なグループと無名のグループは、このフォームを使用することができます

        プリント(( 'リスト'、引数=(10))逆)

        #理解することができ、次の

        {%のurl 'リスト' 年= 10%}

    要約:逆引き参照の有名なグループと無名のグループの場合は、その上に均一な形式を採用します

      リア:

        デジタルデータは、通常、プライマリ・キー値である逆(「リスト」、引数=(10))#

      フロント:

        {%URL 'リスト' 10%}

    本質の逆解析:ビュー機能に対応した名前にアクセスできるように取得することです    

定義:正規表現は十分に正確ではありません前に、増加が可能な構成のより機能的観点となりますので、変更する必要があり、我々はすべて、対応するハイパーリンクの前に、一度修正正規表現、正規表現を修正する必要がありますがして
    、それは非常に面倒なことだったが、いくつかのハイパーリンクを変更することを忘れがあるかもしれません。この時が、逆解析されている正規表現に基づいて接続を動的に生成することができます アプリケーション: テンプレートハイパーリンク ビューリダイレクションの 使用方法: 名前空間属性の定義が含まれるようにしたURLのURLを定義するときに定義され、名前が必要プロパティ を使用して、テンプレートのURLのタグを使用する場合、ビューにポジティブに基づいて表現動的に生成されたアドレスを逆の機能を使用し、継続的なメンテナンスのコストを削減

 

django.shortcuts インポート、レンダリングのHttpResponse、リダイレクト、

 

    あなたは、各ルートと名前との間のビュー機能対応、一意の対応関係を識別する名前を与えるが、名前は一意であるために、繰り返すことができないことを認識することができます。

    対応するパス名に従って得

    フロントエンド:

      {%URL 'インデックス' %}

      %{%のURL]ルーティング機能するには、エイリアス関係からビューに対応します '}

    バックエンド:

      (「対応関係の別名からルーティング機能を表示することができ」)リバース

    逆解析の匿名グループ:

      バックエンド:

        テンプレート:

          {%のURL [編集] edit_idの%}

      フロントエンド:

  ルートの分布:

    各アプリ以下Djangoは独自のurls.pyルーティング層、テンプレートフォルダ、静的なフォルダを持つことができます

    このときurls.py(合計ルート)は、次のプロジェクトの名前は、ルーティング機能関係を考慮して一致していませんが、分布をルーティングします

競合を避けるために#エイリアス
から
app01 インポートapp01_urls ASのURL から app02 インポートapp02_urls ASのURL から django.conf.urls インポートなどが、URL urlpatterns = [
  #時にルートの配布を、合計ルートは、$で終わらない URL(R
" ADMIN ^ / 'admin.site.urls)、 URL(R ' ^ app01 / ' が含まれる(app01_urlsは))、#はあなたが分散インクルード含まないために使用されます (URL R ' ^ app02 / " 、(含まapp02_urlsを) ) ]

    新しいurls.pyファイルのアプリケーションにファイル内のビューのルーティング機能に対応関係を記述し

django.conf.urls インポートURL
 から app01 インポートビュー


urlpatterns = [ 
    URL(' ^インデックス' 、views.index)

]

  :(名前空間を理解します)

  URL(R ' ^ app01 / '、(app01_urls、名前空間=含める" app01 " ))、
    URLを(R ' ^ app02 / '、(app02_urls、名前空間=含める" app02 " ))
    
  のURL的app01下:
  urlpatternsの =を[ 
      URL (' ^インデックス'、views.index、名前= ' インデックス' 

  ] 
  図的app01下:
  デフ指数(要求):
      プリント' app01:'(リバース' app01ました:インデックス"))
      を返しレンダリング(要求、' index.htmlを' 
  
  :のURL app02下
  urlpatterns = [ 
      URL(R&LT ' ^インデックス/ '、views.index、=名' インデックスを' 

  ] 
  :ビューが下app02 
  DEF 指数(要求):
      印刷' app02:'、リバース(' app02:インデックスは' ))
      を返す(はHttpResponseを' これはインデックスapp02です!'

 

      質問:

輸入のimportlibの

importlib.import_module(' app01.urls 'app01インポートのURLから等价于

 

 

擬似静的なページ:

  検索の最適化:SEO

  ルートプラスの.htmlの終わりに

仮想環境:

  異なるプロジェクトは異なるPythonインタプリタを設定します

django1.0とdjango2.0の違い

  内部あなたが書いたもの、定期的にサポートしていませんdjango2.0の最初のパラメータパスが正確に100%に一致するものと一致します

  re_path内部django2.0は、URL内django1.0対応します

  パス2.0の内部には、正規表現をサポートしていませんが、それは理解:( 5つのデフォルトのコンバータを提供していますが)

    STR、デフォルトのフォームであるセパレータ、外部パスことを除いて、非空の文字列が一致する場合(/)
    0を含む正の整数と一致する、INT。
    スラッグ、文字、数字、バー、アンダースコアの文字列にマッチします。
    UUID、075194d3-6885-417e-a8a8-6c931e272f00としてフォーマットUUIDを、一致します。
    パスは、パスの区切り文字(/)を含む、任意の非空の文字列に一致する(しませんか?)

 

  カスタムコンバータ: 

クラスFourDigitYearConverter:
        REGEXは = '[0-9] 4} { ' 
        DEF to_python(自己、値):
             戻りINT(値)
         DEFのto_url(自己、値):
             リターン ' %04D '%値   #が十分ではない4つ、占め0埋め、超超はビット数を押すことです!
    register_converter(FourDigitYearConverter、' YYYY '

 

  PS:フロントエンドは、デフォルトの文字列の内容に一致しています

ビュー層:

  JsonReponse

    ホワイトは3つのトリックのようになります。

      HttpResponse

      与えます

      リダイレクト

DEF 指数(要求):
     戻り JsonResponse(RES、json_dumps_paramsは= { ' ensure_ascii ':FALSE})

 

 

 

  FBVとCBV

    FBV:関数ベースのビュー

    CBV:クラスベースのビュー

      「django.middleware.csrf.CsrfViewMiddleware」内の最初の設定は、言葉をコメントし、

django.views インポートビュー

クラスMyCls(ビュー):
     DEF (自己、要求)GET:
         返す(リクエスト、レンダリング' index.htmlを' 

    DEF :POST(自己、要求)
         のリターンはHttpResponse(' POST '
、かどうかFBV CBVルーティング層ルートビューに対応するメモリアドレスの関数であり

、次いで、層をルーティング:URL(R「^ mycls / 」、views.MyCls.as_view())

 

 

  ファイルのアップロード:

   

< フォームアクション= "" メソッド= "ポスト" のenctype = "マルチパート/フォームデータ" > 
    < 入力タイプ= "ファイル" = "MY_FILE" > 
    < 入力タイプ= "提出" > 
</ 形成>

 

 

DEF (Request)をupload_file:
     IF request.method == ' POST ' 印刷' パス:'、request.path)  取得した相対パスで
        印刷' :Full_Path '、request.get_full_path())  完全なパスを取得することがある
        印刷(request.FILES)
        file_obj = request.FILES.get(' MY_FILE ' 
        オープン(file_obj.name、と' WB ' F AS):
             用のラインfile_obj.chunksは():  は、自動的に最初の行にカーソルを移動し、行ずつは読んだ... 
                f.write(ライン)を
         返す(はHttpResponseをOK を返すレンダリング(リクエスト、index.htmlを

 

おすすめ

転載: www.cnblogs.com/tulintao/p/11425696.html
おすすめ