python自動化運維學習第十五天--Django流程和urls基礎
阿新 • • 發佈:2018-12-23
MVC模式和MTV模式
Django的MTV模式本質是各元件之間為了保持鬆耦合關係,Django的MTV分別代表:
- Model(模型):負責業務物件與資料庫的物件(ORM)
ORM提供了sql的api,使用這個api就可以對資料庫進行增刪改查等操作。 - Template(模版):負責如何把頁面展示給使用者,通過渲染展示頁面
- View(檢視):負責業務邏輯,並在適當的時候呼叫Model和Template
此外,Django還有一個url分發器,它的作用是將一個個URL的頁面請求分發給不同的view處理,view再呼叫相應的Model和Template
上圖就是django處理使用者請求的流程
首先通過使用者輸入的url匹配,經過urls路由解析到views試圖,這時會有兩種情況:
- 使用者請求的動態資料需要對資料庫進行操作,通過models對資料庫進行相應操作並返回結果,返回的單條資料格式為QuerySet,多條資料格式為QuerySetList,QuerySetList列表中的元素都是QuerySet。對應圖中的1.1和1.2。然後又有兩種情況,第一種直接把返回的資料不經過處理直接以json格式返回給使用者,一般用於開發人員除錯,對應圖上步驟3;第二種資料經過template指定模板渲染後返回給使用者html,對應圖上步驟2.1和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渲染後的內容了。