1. 程式人生 > >django 實戰篇之視圖層

django 實戰篇之視圖層

upload 漢字 ams .py 補充 別人 url params fbv

視圖層(views.py)

django必會三板斧
HttpResponse >>> 返回字符串
render >>> 支持模板語法,渲染頁面,並返回給前端
redirect >>> 重定向(即可以重定向到別人的網址,也可以重定向到自己路由)

django返回的數據都是HttpResponse對象

JsonResponse(返回json格式的數據) 如何將json打包的漢字不被編譯

用到了一個技術點:

from django.http import JsonReponse
import
json 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‘)

return render(request,‘login.html‘)

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 實戰篇之視圖層