1. 程式人生 > >python自動化運維學習第十五天--Django流程和urls基礎

python自動化運維學習第十五天--Django流程和urls基礎

MVC模式和MTV模式

Django的MTV模式本質是各元件之間為了保持鬆耦合關係,Django的MTV分別代表:

  • Model(模型):負責業務物件與資料庫的物件(ORM)
    ORM提供了sql的api,使用這個api就可以對資料庫進行增刪改查等操作。
  • Template(模版):負責如何把頁面展示給使用者,通過渲染展示頁面
  • View(檢視):負責業務邏輯,並在適當的時候呼叫Model和Template
    此外,Django還有一個url分發器,它的作用是將一個個URL的頁面請求分發給不同的view處理,view再呼叫相應的Model和Template
    django處理請求流程上圖就是django處理使用者請求的流程

首先通過使用者輸入的url匹配,經過urls路由解析到views試圖,這時會有兩種情況:

  1. 使用者請求的動態資料需要對資料庫進行操作,通過models對資料庫進行相應操作並返回結果,返回的單條資料格式為QuerySet,多條資料格式為QuerySetList,QuerySetList列表中的元素都是QuerySet。對應圖中的1.1和1.2。然後又有兩種情況,第一種直接把返回的資料不經過處理直接以json格式返回給使用者,一般用於開發人員除錯,對應圖上步驟3;第二種資料經過template指定模板渲染後返回給使用者html,對應圖上步驟2.1和2.2。
  2. 如果使用者請求的是靜態頁面,則不經過models,直接通過template渲染後返回使用者htm頁面,對應圖上步驟2.1和2.2。
urls基礎

在pycharm中建立一個django的專案,命名為test_django,application name命名為demo。
建立專案後會在test專案下生成demo、template、test_django三個目錄和一個manage.py檔案。其中demo和test_django目錄下會生成一些py檔案,manage.py為啟動檔案。
在這裡插入圖片描述
預設django收到請求後,首先要到test_django目錄下的urls.py檔案中去匹配請求的路徑。
預設urls.py檔案內容如下:

from django.conf.urls import url
from django.
contrib import admin from demo import views #匯入demo包下的views模組,後來新增的 urlpatterns = [ url(r'^admin/', admin.site.urls), #其中括號內第一個引數為匹配的內容,第二個引數為匹配後執行的方法 url(r'^login/$', views.login), #login的請求轉發給views模組內的login函式處理,後來新增的 ]

demo包下的views.py檔案內容

from django.shortcuts import render,HttpResponse,redirect

def login(request):    #接收login頁面的訪問請求
  
    return HttpResponse('Hello! This is a Demo.')     #直接返回給使用者

這時啟動test_django專案,在瀏覽器中輸入http://127.0.0.1:8000/login/ 回車,頁面就會顯示想要的內容。

修改下views.py檔案

from django.shortcuts import render,HttpResponse,redirect

def login(request):    #接收login頁面的訪問請求
    if request.method == 'GET':    #接收的請求是get方法時
        data = 'Hello demo!'
        msg = 'This is a Django project!'
    return render(request, 'login.html', locals())        #locals方法是把data和msg傳給template目錄下的login.html檔案,經過它的處理後返回給使用者。locals必須要函式中的變數名和login.html中接收值的引數名相同,即login.html中接收data變數值的引數名也應該是data
    #return render(request, 'login.html', {‘data’:data, 'msg':msg})     #另一種方法,其中字典中key的data對應login.html檔案中的data,value的data對應函式中的變數data

template目錄下的login.html檔案內容如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

    <h3>{{ data }}</h3>    #接收views.py中login方法下的data變數的值
    <h3>{{ msg }}</h3>     #接收views.py中login方法下的msg變數的值

</body>
</html>

啟動test_django專案,訪問http://127.0.0.1:8000/login/ 就會顯示經過html渲染後的內容了。