django 實戰篇之視圖層
阿新 • • 發佈:2019-04-16
upload 漢字 ams .py 補充 別人 url params fbv return render(request,‘login.html‘)
視圖層(views.py)
django必會三板斧
HttpResponse >>> 返回字符串
render >>> 支持模板語法,渲染頁面,並返回給前端
redirect >>> 重定向(即可以重定向到別人的網址,也可以重定向到自己路由)
django返回的數據都是HttpResponse對象
JsonResponse(返回json格式的數據) 如何將json打包的漢字不被編譯
用到了一個技術點:
from django.http import JsonReponse importjson def index(reuqest): return JsonReponse({"name":"大帥比”,“age”:18},json_dumps_params = {"ensure_ascii":False})
FBV與CBV
FBV:基於函數的視圖
CBV:基於類的視圖(查看源碼發現用到了 閉包技術 和反射技術)
from django.views import View
class Login(View):
def get(self,request):
# return HttpResponse(‘get‘)
def post(self,request):
return HttpResponse(‘post‘)
源碼補充:
第一個疑問:
url(r‘^login/‘,views.Login.as_view()) # >>>等價於 url(r‘^login/‘,views.view)
第二個疑問:
為什麽我get請求就走get方法,post請求就走post方法
文件上傳
前端需要註意的地方
form表單method必須是post
enctype必須是multipart/form-data
文件上傳 前端需要註意的地方 form表單method必須是post enctype必須是multipart/form-data def upload(request): if request.method == ‘POST‘: # print(request.FILES) # print(type(request.FILES)) # print(request.FILES.get(‘myfile‘)) # print(type(request.FILES.get(‘myfile‘))) # 獲取文件對象 file_obj = request.FILES.get(‘myfile‘) # print(file_obj.name) # 獲取文件名 file_name = file_obj.name # 文件讀寫操作 with open(file_name,‘wb‘) as f: # for line in file_obj: for line in file_obj.chunks(): f.write(line) return render(request,‘upload.html‘)
django 實戰篇之視圖層