二 Django框架,urls.py模塊,views.py模塊,路由映射與路由分發以及邏輯處理——url控制器


Django框架,urls.py模塊,views.py模塊,路由映射與路由分發以及邏輯處理——url控制器

這一節主講url控制器

 

一、urls.py模塊

這個模塊是配置路由映射的模塊,當用戶訪問一個url地址時,通過這個路由映射模塊,映射給對應的邏輯處理函數

 

 

urlpatterns等於的一個列表,列表里的一個元素就是一條路由映射

urlpatterns路由映射配置方式

參數說明:

一個正則表達式字符串
一個可調用對象,通常為一個視圖函數或一個指定視圖函數路徑的字符串
可選的要傳遞給視圖函數的默認參數(字典形式)
一個可選的name參數

復制代碼
urlpatterns = [
    url(正則表達式, 映射函數,參數[可選],別名[可選]),
]
urlpatterns = [ url(r'^admin/', admin.site.urls,{'a':'123'},'ADMIN'), ]
復制代碼

如:

復制代碼
"""Xiangmu URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/1.10/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.conf.urls import url, include
    2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from app1 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),   #系統生成的映射
                                               #注意里面的任意一條映射匹配成功,后面的則不在匹配
    url(r'^articles/2003/$', views.special_case_2003),                           #表示articles/2003/這個路徑映射views模塊的special_case_2003函數
    # url(r'^articles/([0-9]{4})/$', views.year_archive),                        #表示2003可以是0-9的任意4個數字
    # url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),            #表示匹配二級目錄
    # url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),  #表示匹配三級目錄
]
復制代碼

 

二、views.py模塊,路由映射的函數模塊,邏輯處理路由映射的需求

 

 

注意:自定義映射函數時,有兩個重點

HttpResponse(字符串)方法向用戶返回字符串

  1,定義的函數必須,定義一個形式參數,這個形式參數接收的url請求信息對象,可以通過這個形式參數的各種方法獲取到各種請求信息

  2,向用戶返回信息,必須在函數結尾return,如果是要給用戶返回一串字符串,那就必須返回HttpResponse方法,參數是要返回的字符串,需要先導入這個方法

復制代碼
from django.shortcuts import render,HttpResponse

# Create your views here.

def special_case_2003(request):
    print(request.method)       #獲取用戶請求的路徑
    return HttpResponse('你好')
復制代碼

 

最后測試一下

 

瀏覽器輸入:http://127.0.0.1:8000/articles/2003/

 

 

邏輯處理時獲取用戶訪問路徑

邏輯處理自定義函數的第二個參數,就是接收用戶請求路徑的,所以需要自定義形式參數來接收

復制代碼
from django.shortcuts import render,HttpResponse

# Create your views here.

def special_case_2003(request,name):
    print(request.method)       #獲取用戶請求的路徑
    print(name)           #打印路徑
    return HttpResponse(name)  #將路徑返回到頁面
復制代碼

注意:要獲取路徑時,需要在路由映射哪里用正則的分組()號,將要獲取的路徑分組,也就是括起來,如果路由映射里有多個分組,邏輯函數就需要多個形式參數接收

復制代碼
"""Xiangmu URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/1.10/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.conf.urls import url, include
    2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from app1 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),   #系統生成的映射

    url(r'^(articles/2003)/$', views.special_case_2003),                         #表示articles/2003/這個路徑映射views模塊的special_case_2003函數
    # url(r'^articles/([0-9]{4})/$', views.year_archive),                        #表示2003可以是0-9的任意4個數字
    # url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),            #表示匹配二級目錄
    # url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),  #表示匹配三級目錄
]
復制代碼

 上面我們講到的是自定義形式參數接收訪問路徑,下面我們講設置固定形式參數

邏輯處理函數,接收用戶訪問路徑時設置固定形式參數,

需要在路由映射里設置,邏輯函數接收的參數名稱?P<year>

路由映射

復制代碼
"""Xiangmu URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/1.10/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.conf.urls import url, include
    2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from app1 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),   #系統生成的映射

    url(r'^(?P<year>articles/2003)/$', views.special_case_2003),                         #表示articles/2003/這個路徑映射views模塊的special_case_2003函數
    # url(r'^articles/([0-9]{4})/$', views.year_archive),                        #表示2003可以是0-9的任意4個數字
    # url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),            #表示匹配二級目錄
    # url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),  #表示匹配三級目錄
]
復制代碼

邏輯處理

復制代碼
from django.shortcuts import render,HttpResponse

# Create your views here.

def special_case_2003(request,year):
    print(year)
    return render(request,'index.html')
復制代碼

 

 

邏輯處理返回html文件

將HTML文件放到templates文件夾,邏輯處理的時候會自動到這個文件夾搜索相應文件

需要先導入render方法

render(用戶請求對象,html文件路徑名稱)方法,向用戶返回html文件內容

復制代碼
from django.shortcuts import render,HttpResponse

# Create your views here.

def special_case_2003(request,name):
    return render(request,'index.html')
復制代碼

 

整個流程

路由映射

復制代碼
"""Xiangmu URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/1.10/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.conf.urls import url, include
    2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from app1 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),   #系統生成的映射

    url(r'^(articles/2003)/$', views.special_case_2003),                         #表示articles/2003/這個路徑映射views模塊的special_case_2003函數
    # url(r'^articles/([0-9]{4})/$', views.year_archive),                        #表示2003可以是0-9的任意4個數字
    # url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),            #表示匹配二級目錄
    # url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),  #表示匹配三級目錄
]
復制代碼

邏輯處理

復制代碼
from django.shortcuts import render,HttpResponse

# Create your views here.

def special_case_2003(request,name):
    return render(request,'index.html')
復制代碼

 

整個流程圖

 

上面講的,都是通過全局里的urls.py模塊路由映射的,如果網站很大有很多個app應用,那么就需要路由分發,每一個app應用負責一個業務

路由分發

過個全局里的urls.py模塊,配置路由分發,將制定的路徑分發到指定的app應用里的urls.py模塊里路由映射

全局urls.py模塊路由分發

首先要在全局urls.py模塊引入

from django.conf.urls import include, url

include('app1.urls')函數,設置要分發的路由映射路徑名稱

 

全局urls.py模塊路由分發

from django.conf.urls import include, url
urlpatterns = [
    url(r'^bug', include('app1.urls')),   #將訪問路徑以bug開頭的路徑分發到app1下的urls.py模塊里進行路由映射

]

app1.py路由映射

復制代碼
from django.conf.urls import url
from django.contrib import admin
from app1 import views

urlpatterns = [
    url(r'articles/', views.special),  #表示接收全局的路由分發,做路由映射,映射到views下的special函數處理
]
復制代碼

views.py邏輯處理

復制代碼
from django.shortcuts import render,HttpResponse

# Create your views here.

def special(request):
    return render(request,'index.html')   #向用戶顯示一個html頁面
復制代碼

 

 

路由映射第三個參數,額外傳參,字典方式,邏輯處理函數以參數方式接收字典鍵

路由映射

復制代碼
from django.conf.urls import url
from django.contrib import admin
from app1 import views

urlpatterns = [
    url(r'articles/', views.special,{'anme':1234})     #路由映射第三個參數,額外傳參,字典方式,邏輯處理函數以參數方式接收字典鍵
]
復制代碼

邏輯處理

復制代碼
from django.shortcuts import render,HttpResponse

# Create your views here.

def special(request,anme):
    print(anme)                           #接收路由映射的額外傳參字典的鍵
    return render(request,'index.html')   #向用戶顯示一個html頁面
復制代碼

注意:如果額外參數,如果寫在全局的路由分發里,那么這個路由分發下的所有路由映射函數都可以獲取到

 

 

路由映射第四個參數,給路由映射的路徑取一個別名,這個別名代指的就是路由映射路徑,

復制代碼
from django.conf.urls import url
from django.contrib import admin
from app1 import views

urlpatterns = [
    url(r'articles/', views.special,{'anme':1234},name='luj')     #路由映射第三個參數,額外傳參,字典方式,邏輯處理函數以參數方式接收字典鍵
]
復制代碼

 

最終url控制器流程圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM