程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Django視圖(一)

編輯:Python

目錄

一、視圖的介紹

二、使用視圖

1.定義視圖

2.配置URLconf

3.測試請求

三、url、path、re_path三者的區別

1.url

2.path

3.re_path

四、路由命名與reverse反解析

1 路由命名

2 reverse反解析


一、視圖的介紹

  • 視圖就是應用views.py文件中的函數
  • 視圖的第一個參數必須為HttpRequest對象,還可能包含下參數如
    • 通過正則表達式組獲取的位置參數
    • 通過正則表達式組獲得的關鍵字參數
  • 視圖必須返回一個HttpResponse對象子對象作為響應
    • 子對象: JsonResponse HttpResponseRedirect
  • 視圖負責接受Web請求HttpRequest,進行邏輯處理,返回Web響應HttpResponse給請求者
    • 響應內容可以是HTML內容404錯誤重定向json數據...

視圖的處理過程:

使用視圖時需要進行兩步操作,兩步操作不分先後

  • 應用/views.py中定義視圖
  • 配置URLconf

二、使用視圖

1.定義視圖

  • 視圖就是一個Python函數,被定義在應用的views.py中.
  • 視圖的第一個參數是HttpRequest類型的對象request,包含了所有請求信息.
  • 視圖必須返回HttpResponse對象,包含返回給請求者的響應信息.
  • 需要導入HttpResponse模塊 :

from django.http import HttpResponse

定義視圖函數 : 響應字符串‘這是我的第一個視圖’給客戶端

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse('這是我的第一個視圖!')

打開views.py輸入上述代碼

2.配置URLconf

查找視圖的過程 :

        1.請求者在浏覽器地址欄中輸入URL, 請求到網站.

        2.網站獲取URL信息.

        3.然後與編寫好的URLconf逐條匹配.

        4.如果匹配成功則調用對應的視圖.

        5.如果所有的URLconf都沒有匹配成功.則返回404錯誤.

URLconf入口

ROOT_URLCONF = 'bookmanager.urls'——>是默認的的URLconf入口

URLconf入口可以根據自己的需求修改,但一般都默認使用

完成URLconf配置分為兩步:

1.在應用中定義URLconf

首先,在應用目錄中新建一個urls.py文件,在文件中導入相關的模塊代碼如下:

from django.urls import path
from book.views import index
urlpatterns = [
path('', index)
]

2.在項目中定義URLconf

打開項目中的urls.py,文件已有admin的url,所有我們可以直接訪問到站點管理

在【urlpatterns】列表中我們可以定義添加我們的URLconf,在注釋中,有提供我們如何添加url的參考例子,添加後的代碼如下:

from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', include('book.urls'))
]

當我們完成了配置URLconf的步驟後,我們就能通過運行代碼來,訪問我們的視圖。

3.測試請求

運行代碼:

打開我們的網址

 在搜索框中輸入127.0.0.0:8000/index/,就能看到我們設置的視圖

三、url、path、re_path三者的區別

        初學者一般不能分清兩者的區別,所這簡單介紹下兩者.首先,url是Django 1.x中的寫法,p在Django2.1中,開始捨棄django1.x中的url寫法。

        在django2.x中,描寫url配置的有兩個函數path和re_path.re_path()函數可以看做是django 1.x中得url函數,即可以在路徑中使用正則.

1.url

在settings.py文件中有一個ROOT_URLCONF設置,設置的是在訪問網址時通過哪一個url文件去匹配所請求的網址

url參數

url或者re_path要復雜一些 (r'^blog/(?P[0-9]{4})/′)首先需要開始符和結尾符 ') 首先需要開始符^和結尾符 ′)首先需要開始符和結尾符,參數匹配一個 ()就是一個匹配參數,

(?P<匹配的字段名>正則表達式)

進行匹配是不包括get或者post請求方式的參數及域名比如www.qq.com/blog?num=1並不會匹配?後邊的字符

可以給request參數設置一個默認值,最常見的分頁url,比如

 urlpatterns=[
url(r'^page/$',views.page),
url(r'^page(?P<num>[0-9]+)$',views.page)
]
#views
def page(request,num='1'):
pass

自定義錯誤頁面關鍵字handler400=blog.views.page_no_find

 #urls.py
…
handler400=blog.views.page_no_find

2.path

        參數的使用方法path(‘blog/str:string/') 簡單了很多,就是尖括號,前邊是str代表參數的類型,後面代表參數的名稱

path參數類型

捕獲url中的參數需要用到尖括號<> 指定尖括號中的值類型比如int:astr:link這個轉換器還有許多類型比如:

int 匹配0和正整數

str 匹配任何空字符串但不包括/

slug 可理解為注釋 匹配任何ascii碼包括連接線和下劃線

uuid 匹配一個uuid對象(該對象必須包括破折號—,所有字母必須小寫)

path 匹配所有的字符串 包括/(意思就是path前邊和後邊的所有)

3.re_path

如果遇上路徑和轉換器語法都不足以定義的URL模式,那麼就需要使用正則表達式,這時候就需要使用re_path(),而非path()。

舉例:傳遞 數字結尾的參數

re_path(r'(\d+)/$',views.peopleList,name='peopleList'),

四、路由命名與reverse反解析

1 路由命名

在定義路由的時候,可以為路由命名,方便查找特定視圖的具體路徑信息。

1) 在使用include函數定義路由時,可以使用namespace參數定義路由的命名空間,如

url(r'^',include('book.urls',namespace='book'))

命名空間表示,凡是book.urls中定義的路由,均屬於namespace指明的book名下。

命名空間的作用:避免不同應用中的路由使用了相同的名字發生沖突,使用命名空間區別開。

2) 在定義普通路由時,可以使用name參數指明路由的名字,如

urlpatterns = [
url(r'^$',index),
# 匹配書籍列表信息的URL,調用對應的bookList視圖
url(r'^booklist/$',bookList,name='index'),
url(r'^testproject/$',views.testproject,name='test'),
]

2 reverse反解析

使用reverse函數,可以根據路由名稱,返回具體的路徑,如:

from django.core.urlresolvers import reverse
#或者
from django.urls import reverse
def testproject(request):
return HttpResponse("OK")
# 定義視圖:提供書籍列表信息
def bookList(request):
url = reverse('book:test')
print(url)
return HttpResponse('index')
  • 對於未指明namespace的,reverse(路由name)
  • 對於指明namespace的,reverse(命名空間namespace:路由name)

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved