前面學習的例子都是通過 url 來匹配 一個函數(shù),這種方式叫做 function based view (BSV)。一個典型的使用方式就是通過在view.py里面定義一個函數(shù),然后通過函數(shù)的request參數(shù)獲取method的類型,比如直接刷新頁面就是get方式,提交表單就是post方式,這樣來根據(jù)提交的不同方式進行不同的處理。
10余年的太倉網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。全網(wǎng)整合營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整太倉建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)公司從事“太倉網(wǎng)站設(shè)計”,“太倉網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。比如:
def user_info(request): if request.method == "GET": user_list = models.UserInfo.objects.all() group_list = models.UserGroup.objects.all() return render(request, 'user_info.html', {'user_list': user_list, "group_list": group_list}) elif request.method == 'POST': u = request.POST.get('user') p = request.POST.get('pwd') models.UserInfo.objects.create(username=u,password=p) return redirect('/cmdb/user_info/')
另外一種方式叫做 class based view (CBV)。這種方式需要導(dǎo)入一個View類,通過自定義一個子類繼承這個類,我們可以利用View里面的dispatch()方法來判斷請求是get還是post。dispatch方法的本質(zhì)是一個反射器,可以根據(jù)名字來調(diào)用同名的方法。
View類的部分代碼可以看出dispatch通過反射獲取列表里面的方法名稱
http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace'] def dispatch(self, request, *args, **kwargs): # Try to dispatch to the right method; if a method doesn't exist, # defer to the error handler. Also defer to the error handler if the # request method isn't on the approved list. if request.method.lower() in self.http_method_names: handler = getattr(self, request.method.lower(), self.http_method_not_allowed) else: handler = self.http_method_not_allowed return handler(request, *args, **kwargs)
CBV的例子如下。
注意這里在子類里面重新定義了dispatch這個方法,同時又使用了super()來調(diào)用父類的構(gòu)造方法,這樣的好處是功能不變,但是可以靈活的添加新的功能。
from django.views import View class Home(View): def dispatch(self, request, *args, **kwargs): # 調(diào)用父類中的dispatch print('before') result = super(Home,self).dispatch(request, *args, **kwargs) print('after') return result def get(self,request): print(request.method) return render(request, 'home.html') def post(self,request): print(request.method,'POST') return render(request, 'home.html')
為了調(diào)用自定義的類里面的方法,在url里面,我們需要調(diào)用View類的as_view()方法作為入口。
比如說
# urls.py from django.conf.urls import url from myapp.views import MyView urlpatterns = [ url(r'^about/', MyView.as_view()), ]
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。