django學習第79天Django檢視層
阿新 • • 發佈:2019-01-10
一.request物件
method:請求方式 GET:get請求的引數(post請求,也可以攜帶引數) POST:post請求的引數(本質是從bdoy中取出來,放到裡面了) COOKIES--->後面講 META:字典(放著好多東西,前端傳過來的,一定能從其中拿出來,包括客戶端的Ip,客戶端的所有請求) body:post提交的資料 path:請求的路徑,不帶引數 request.get_full_path() 請求路徑,帶引數 (這引數是指?id=10這種的) session---後面講 user---後面講 FILES encoding:編碼格式 is_ajax()---後面講(判斷是否是ajax請求)
二.HttpResponse物件
-三件套(render.redirect.reverse)
render(request, '模板名字',{key:value})
-JsonResponse:往前端返回json格式資料(沒有它,我可以自己寫)
-轉列表格式:指定safe=False
-中文字元問題:json_dumps_params={'ensure_ascii':False}
本質封裝了json.dumps
# 第一種方式 # import json # data={'name':'lqz','age':18} # data1=['lqz','egon'] # return HttpResponse(json.dumps(data1)) # 第二種方式 from django.http import JsonResponse # data = {'name': 'lqz', 'age': 18} data1 = ['lqz', 'egon'] # return JsonResponse(data) return JsonResponse(data1,safe=False)
三.CBV(基於類的檢視)和FBV(基於函式的檢視)
-cbv:一個路由寫一個類 -在檢視層先定義一個類:繼承自View from django.views import View class MyClass(View): # 當前端發get請求,會響應到這個函式 def get(self, request): return render(request,'index.html') # 當前端發post請求,會響應到這個函式 def post(self,request): print(request.POST.get('name')) return HttpResponse('cbv--post') -在路由層: re_path('^myclass/$',views.MyClass.as_view()),
四.檔案上傳
-form表單預設提交的編碼方式是enctype="application/x-www-form-urlencoded"
-前端:如果要form表單上傳檔案,必須指定編碼方式為:enctype=multipart/form-data,method='post
-後端:
file=request.FILES.get('myfile')
#開啟空檔案,用for 迴圈讀file,寫入空檔案
with open(file.name,'wb') as f: #檔案路徑要先拼接好(os.path.jion(path,file.name),沒設定預設在該專案目錄下
for line in file:
f.write(line)
五.圖書表設計
圖書管理系統
-表:
book表
author表
publish表
-一對一:一對多的關係一旦確立,關聯欄位寫在哪都可以 對應orm中的models.OneToOneField(to='',to_filed='')
-一對多:一對多的關係一旦確立,關聯關係寫在多的一方 對應orm中的models.ForeignKey(to='',to_filed='')
-多對多:多對多的關係,必須建立第三張表(中間表) 對應orm中的models.ManyToManyField(to='')自動建立第三張表