V部分就是Django Views(視圖函數)
其下主要包括兩部分:
一,URL配置(URLconf)
是Django所支撐網站的目錄
本質是URL模式以及要為該URL模式調用的視圖函數之間的映射表;你就是以這種方式告訴Django,對于這個URL調用這段代碼,對于那個URL調用那段代碼。
配置部分是在Django項目下的
urls.py
下的
urlpatterns = [ ]
部分
具體的格式Djange1.x版本和2.x版本略有不同,這裡以2.x
版本為例:
首先
from django.urls import path
這裡url精确查找方式,用法:
把
path('url',views.視圖函數)
放到
urlpatterns
中
一般視圖函數都放在app中,是以還要
from app名稱 import views
還有一個模糊查找:
from django.urls import re_path
相當于1.x版本裡的url
相比于精确查找就是在url部分加入了正則,使用了模糊查找
這裡插一句,URL查找是從上到下查找,一旦找到就執行對應views函數,是以在使用模糊查詢re_path時要特别注意邏輯順序
以上兩者path(),re-path())都可以加一個那麼屬性,給url起一個别名,前端直接用别名
作用是前端大量調用這個url是,當後端url名稱修改時,前端無須改動,提高可維護性
此外,還有一個
url分發的概念
意思是說在一個Django項目中,一般有多個app
要把url查找分發到各個app中
首先在app下建立一個urls.py檔案,存放屬于自己的url
形式和在Djiango項目檔案夾urls.py中的一樣
要想讓url分發生效,要在Djiango項目檔案夾urls.py中配置
from django.urls import include #開啟url分發功能
然後在urlpatterns 添加
path('app名稱/', include('app名稱.urls'))
之後這種 ip位址:端口号/app/url 就會到對應app下的urls.py查找執行對應的views函數
二,Django Views(視圖函數)
也就是根據url來決定要執行的視圖函數部分
先看視圖函數的基本結構:
def "函數名"(request,*args,**kwargs):
"函數體"
return "傳回值"
先看參數部分:
必須要有的一個就是request(其它名字也行),裡面包含了用戶端的所有請求資訊
form表單裡的請求資訊都是用字典的形式存儲在request.請求方式中(POST or GET)中
*args 和 **kwargs可以改成通過url有名分組的方式來定的形參名
eg:
re_path(r'article/(?P<year>\d{4})/(?P<month>\d{2})',views.article_year_month)
,
#有名分組正則,執行函數中隻能用給定好了的形參名字
ps:第一部分說到的都是無名分組
再看傳回值部分:
有下面幾種方式:
render , HttpResponse , render_to_response , redirect
都需要導入:
from django.shortcuts import render, HttpResponse,render_to_response,redirect
1.HttpResponse:
基本方式,就和httprequest一樣,是http請求中兩個核心對象:
http請求:HttpRequest對象
http響應:HttpResponse對象
後面幾種響應方式最後都是交給了HttpPesponse(源碼可知),但不常用,主要用render
形式
return HttpResponse(“字元串”)
字元串中可以是html代碼和字元串操作,缺點很明顯,耦合性太高,不常用,不細講
2.render(最最常用)
形式:
return render(request,"html檔案名",context對象)
context對象是可選參數
插:1.render會把第二個參數(html檔案的字元串形式)執行個體化為Template對象,把第三個參數執行個體化為Context對象,然後Template類對象調用render方法,傳入Context執行個體化對象做參數,得到一個結果
2render把處理好的結果會交給Httpresponse傳回給用戶端,是以要有一個request參數
3.render_to_response
相比較render 就是不用傳request對象,當然後面都是交給響應對象HttpResponse處理
不推薦,因為可能有會bug
4.redirect
形式:return redirect(“url路徑”)
我的了解是用戶端接收到服務端響應的return redirect(“url路徑”)後,會按照這個url對服務端再發送請求,是以用戶端url位址會變成上面的url路徑
另補充一點:要重新通信上一次的對象時,可省略ip位址和端口,這是Django自帶的一個同源機制