django-3-檢視(views.py)與網址(urls.py)
檢視與網址
操作檔案:urls.py、views.py
urls.py
作用:用於處理前臺的連結(如前臺訪問:127.0.0.1:8080/index/1212/21212),其實永遠訪問的是同一個檔案,至於結果則是通過urls處理,呼叫不同views中的不同函式,當然這些函式可以在urls中指定。
主要格式:
1.7:url(r
'^add/$'
,
'calc.views.add'
, name
=
'add'
)
,
1.8:
url(r
'^add/$'
, views.add, name
=
'add'
),
2.0:
path(
'add/'
, views.add, name
=
'add'
),
注意:1.8和2.0需要將views匯入到urls中,如 from
app
import
views
額外:可以在app中新建urls,通過include函式(2.0:from
django.urls
import
include)使其有效(path('app/', include('app.urls')),)
值得一提的是,每個路由都有一個name(如上:name="add")可寫可不寫,這裡雖不是必須但也極其重要,他是前臺連結的別名,即模板中可以使用這個name的值作為路由,需要和{% url %}一起使用。這樣寫的好處是,程式碼可維護性很高。
views.py
上面提到需要在urls中引入views模組,如:views.add,其實是在呼叫views中的add方法,這個方法很特殊,必須至少一個引數,而第一個引數作為資料請求的控制代碼,也就是request,在裡面可以獲取前端發來的請求,而且必須返回一個HttpResponse物件。
作用:用於處理請求、資料庫互動、模板呼叫等(內容很多)。
呼叫模板(templates): 在views 的函式中最後加上return
render(request,
'home.html'
),
home.html即為模板名稱,相應的在tempalates中必須有home.html檔案,並且需要設定settings.py中的TEMPLATES變數,設定DIRS:'DIRS': [os.path.join(BASE_DIR,'Templates')],
關於FBV與CBV
FBV:f即為function
通過在views.py檔案中(其他檔案也行,只要urls.py檔案能訪問並呼叫該函式,且最終return HttpResponse(),即可)定義函式,(如def index(request):),而在urls.py中可通過
path(
'index/'
, views.index, name
=
'index'
)呼叫index方法,這就是FBV。
那麼CBV又是什麼呢?
C即為class,通過類呼叫,這個類是一個很特殊的類。
1、需要繼承View類
views.py--------------------------------------------------------------- from django.views.import View class A(View): def get(self,request): return HttpResponse() def post(self,request): return HttpResponse() urls.py------------------------------------------------------------------ path('A/', views.A.as_view()), #注意,是views.A.as_view() #解釋如下: 通過views.A.as_view(),django會根據method的值會自動呼叫get或者post,當然還有其他方法,一共八種,當然from表單只能使用get或者post
CBV擴充套件
django是如何呼叫get和post方法的呢?
其實是通過Views下的dispatch方法來呼叫的。
因此,重寫dispath方法,來額外編寫在客戶端請求get或者post之前,需要做的工作。比如:使用者驗證等
from django.views.import View class A(View): def get(self,request): return HttpResponse() def post(self,request): return HttpResponse() def dispatch(self,request,*args,**kwargs): result = super(A,self).dispatch(request,*args,**kwargs) #在這裡編寫自己的判斷邏輯,比如:使用者登入驗證等內容 return result