一、FBV(function base views)html
在視圖裏使用函數處理請求。django
url:
re_path('fbv', views.fbv),
# url(r'^fbv', views.fbv),cookie
func:
def fbv(requset):
return render(requset,'fbv_Cbv.html')函數
二、CBV (class base views)post
url:url
re_path('cbv', views.Cbv.as_view()),
# url(r'^cbv', views.Cbv.as_view()),spa
class:orm
from django.views import View
#導入View模塊
class Home(View): #使用類處理須要繼承View(view是Home的父類,Home是子類)
def get(self,request): #自動識別,若是用戶請求方式:get,那麼自動調用該方法執行結果
print(request.method)
return render(request, 'home.html')
def post(self,request):
print(request.method)#自動識別,若是用戶請求方式:post,那麼自動調用該方法執行結果
return render(request, 'home.html')
htm
三、FBV+CBV 獲取數據、返回數據的命令參數繼承
A.獲取數據的幾種方式
request.method
request.GET
request.POST
request.FILES
request.path_info
request.COOKIES
reqeust.body #全部內容的原生數據
B.獲取checkbox等多選的內容
request.POST.getlist()
request.GET.getlist()
#因此分紅兩類
request.body #用戶請求的原生數據,以字符串形式存放
request.PUT
request.DELECT
request.MOVE
#django對上面3種沒有作處理,因此咱們操做以上3種的時候就須要經過request.body獲取原生數據:字符串形式
request.Meta
#出了數據外,請求頭相關的信息,如:判斷用戶是PC端仍是移動端
request.method(POST、GET、PUT..)
request.path_info
request.COOKIES
C.接收上傳文件,注意:模板文件html的form標籤必須作特殊設置:enctype="multipart/form-data"
obj = request.FILES.get('file')
obj.name #取該文件名
obj.size #取該文件的字節大小
obj.chunks #取該文件的塊
file_path = os.path.join('%s\\upload'%os.path.dirname(os.path.abspath(__file__)), obj.name) #當前文件的目錄下的upload目錄和接收文件名進行拼接成文件路徑
f = open(obj.name,mode= 'wb') #若是該路徑文件存在就打開,不存在就建立
for item in obj.chunks():
f.write(item) #寫入文件
f.close() #關閉文件
D、返回給用戶的幾種方式
return render(request,'模板路徑.html',{'list':[1,2,3,4],'dict': {'k1':'v1','k2':'v2'} }) #返回給用戶指定通過模板渲染後的html
retune redirect(’url路徑’) #跳轉到指定url
retune HttpResponse(‘字符串’) #直接返回給用戶字符串
response = HttpResponse(a)
response.set_cookie(‘key’:’value’) #設置客戶端cookie
response[‘name’] = ‘bur’ #設置客戶端響應頭
return response
四、FBV+CBV 添加驗證裝飾器
A、FBV添加裝飾器
def auth(func):
def deco(request, *args, **kwargs):
u = request.get_signed_cookie('username', salt='user', default=None)
if not u:
return render(request, 'login.html')
return func(request, *args, **kwargs)
return deco
@auth
def index(request):
u = request.get_signed_cookie('username', salt='user', default=None)
return render(request, 'index.html', {'user': u})
@auth
def detail(request):
u = request.get_signed_cookie('username', salt='user', default=None)
return render(request, 'detail.html', {'user': u})
訪問index/detail時,調用auth裝飾器,若是驗證成功,則執行index/detail(return func(request, *args, **kwargs)語句起的做用);
不然跳轉到login.html
B、CBV方式添加裝飾器:經過django自帶的裝飾器method_decorator 的@method_decorator(cookie)來實現
from django.utils.decorators import method_decorator
from django import views
# @method_decorator(cookie,name='dispatch') # dispatch的便捷寫法
class CBVtest(views.View):
@method_decorator(cookie) # 給dispatch方法添加裝飾器,那麼下面全部的get,post都會添加
def dispatch(self, request, *args, **kwargs):
return super(CBVtest, self).dispatch(request, *args, **kwargs)
# @method_decorator(cookie) # 單獨添加
def get(self, request):
u = request.get_signed_cookie('username', salt='user', default=None)
return render(request, 'houtai.html', {'user': u})
def post(self, request):
return HttpResponse('post ok')