Django——Django 中視圖(view)的實現原理

Django 中的視圖(View)

​ 在 Django 的 MVT 模型中,視圖 View 屬於 V 層,類似於 MVC 模型中的 C,Controller 層,用來接收前端發出的請求,進行處理後再將結果返回給前端

​ 視圖通過在 app 中的 view.py 文件中實現,實際上視圖就是一個個實現網站功能的函數,負責連接 M(模型層)和 T(模板層),實現前後臺之間的數據流動

視圖工作的原理

​ 想要學會使用視圖,首先要了解視圖工作的原理,我們從 Django 如何觸發視圖、和如何編寫視圖中函數來說

觸發

​ 首先,想要運行視圖中寫好的邏輯代碼,那麼視圖是怎麼和前端網頁產生聯繫的呢?

​ 這裏要從項目名文件夾下的 urls.py 文件說起,Django 的工作機制是通過瀏覽器地址欄中地址的變化來與視圖連接的,我們可以看到,urls.py 文件有如下代碼

urlpatterns = [
    path('admin/', admin.site.urls),
]

​ 不知道大家對 admin 是否還有印象,我們進入 Django 的 admin 頁面時是在項目地址後加入/admin來進入的,這也說明了 Django 的工作原理:

​ Django 是通過地址欄的變化,先在項目中的 urls.py 文件中尋找匹配地址欄的信息,再到 app 下的 urls.py 文件中匹配,我們通過url(path, include(app 的 urls))函數來指引項目找到 app 中的 urls.py,代碼如下,我的 app 名爲 login:

from django.contrib import admin
from django.urls import path
from django.conf.urls import include, url

urlpatterns = [
    path('admin/', admin.site.urls),
    # 包含 login 中的 urls 文件
    url(r'^', include('login.urls')),
]

​ urls.py 的url函數中,第一個參數是一個字符串,用來匹配地址欄中項目啓動地址後的字符,即如果項目啓動地址是127.0.0.1:8080,那麼它匹配的就是 8080 後緊跟着的字符串,第二個參數是使用include()函數指引的 app 中的 urls.py 文件,我們通過它的指引找到指定 app 中的 urls.py

r'^'代表匹配任意字符的正則表達式,意思是不管 8080 後接的是什麼字符,項目都會去到後邊include('app,urls')中指定的 app 的 urls.py 文件中尋找

​ 隨後我們在剛剛指定的 app 下創建 urls.py 文件,假設我們要在視圖中實現一個index函數,並希望當瀏覽器地址欄爲/index時觸發它,就在 app 下的 urls.py 文件中寫下如下代碼:

from django.conf.urls import  url
from login import views

urlpatterns = [
    # 通過 url 函數設置 url 路由配置項
    # 建立 /index 和視圖 index 之間的關係
    url(r'^index$', views.index),
]

​ 這裏必須使用名爲urlpatterns的列表來進行視圖的配置,同樣使用url函數,第一項依然是要匹配的地址欄字符串,第二項變爲當前 views.py 文件中的函數名,這裏函數名後不寫(),這裏還需要注意的是,地址欄的字符串到這裏已經是二次過濾了,也就是說在之前如果被過濾的字符,就不是這次過濾的範疇了

視圖函數的編寫

​ 下面我們來實現這個index函數,在 app 下的 views.py 中寫如下函數:

def index(request):
    # request 是 HttpRequest 對象的一個參數
    # 進行處理,和 M(數據庫) 和 T(模板) 進行交互
    # 最終要返回 HttpResponse 對象
    return HttpResponse('Hello World')

​ 這些代碼的功能就是在瀏覽器中打印一個 Hello World,我們主要說一說這個函數的編寫流程

​ 首先,views/py 中的函數,必須帶有request參數,它會從前端接收數據信息,而這些函數最後要給瀏覽器返回一個 HttpResponse 對象(需要from django.http import HttpResponse),這就是視圖函數的大致工作流程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章