Django檢視層

阿麗米熱發表於2023-01-01

Django檢視層

一、檢視層之必會三板斧

用來處理請求的檢視函式都必須返回HttpResponse物件  # 完全正確
class HttpResponse:
    pass
return HttpResponse

def render():
    return HttpResponse()
return render()

def redirect():
    redirect_class = 類(祖先有個類是HttpResponse)
    return redirect_class()
return redirect()

二、JsonResponse物件

from django.http import JsonResponse
def index_func(request):
    user_dict = {'name':'almira', 'age':24}
    return JsonResponse(user_dict)
class JsonResponse():
    def __init__(self,data,json_dumps_params=None):
        json.dumps(data,**json_dumps_params)
JsonResponse主要序列化字典
針對非字典的其他可以被序列化的資料需要修改safe引數False

三、request物件

form表單攜帶檔案型別的資料需要做到以下幾點
    1.method必須是post
    2.enctype必須是multipart/form_data
django後端需要透過request.FILES獲取檔案型別的資料

四、檢視層之FBV與CBV

FBV(Function Based views, 基於函式的檢視)
def index(request):
    return HttpResponse物件
CBV(Class Based Views, 基於類的檢視)
from django import views
class MyLoginView(view.View):
    def get(self,request):
        return HttpResponse('from CBV get function')
    def post(self,request):
        return HttpResponse('from CBV post function')
    path('login/', views.MyLoginView.as_view())
會自動根據請求方法的不同自動匹配對應的方法執行
其實,無論是FBV還是CBV,並不難
如果寫的是函式那就FBV如果寫的是類那就CBV
名字起的很高大上,不可怕哈哈哈

五、CBV原始碼剖析

1.從CBV的路由匹配切入
	path('login/', views.MyLoginView.as_view())
        1.類名點名字(名字的查詢問題)
        2.類名點名字並加括號呼叫(靜態方法、繫結給類的方法)
2.函式名加括號執行優先順序最高 專案一啟動就會自動執行as_view方法
	path('login/', views.view)  # CBV路由本質還是FBV
3.瀏覽器位址列訪問login路由需要執行view函式
	1.產生我們自己編寫類的物件
 	2.物件呼叫dispatch方法(注意查詢順序)
4.研究父類中的dispatch方法
	獲取當前請求方法並轉小寫 之後利用反射獲取類中對應的方法並執行
class View:
     @classmethod
     def as_view(cls, **initkwargs):
        def view(request, *args, **kwargs):
            self = cls(**initkwargs)
            return self.dispatch(request, *args, **kwargs)
     def dispatch(self, request, *args, **kwargs):
         handler = getattr(self, request.method.lower())
         return handler(request, *args, **kwargs)

六、虛擬環境

pycharm建立虛擬環境>>>:相當於重新下載了全新的直譯器
命令列的建立語句:python -m venv pyvenv38
此方法不支援多版本共存
啟用語句命令 activate
關閉語句命令 deactivate

相關文章