1. 程式人生 > 其它 >Django函式檢視與類檢視

Django函式檢視與類檢視

一、函式檢視

1、在子應用的views.py檔案中定義

2、必須傳遞引數request

3、路由條目配置:路由與函式檢視引用 對映

示例:

def index(request):
    """
    :param request: WSGI物件,自動傳遞
    :return: HttpResponse物件
    """
    print(request)
    print(type(request))
    # 檢視繼承關係
    print(type(request).__mro__)
    return HttpResponse("hi~ django.")


def
get_project(request, pk): return HttpResponse(f"project{pk}") def project_name(request, name): return HttpResponse(f"project: {name}")

二、類檢視

1、在子應用的views.py檔案中定義

2、必須繼承View或View的子類

3、類檢視中定義的檢視方法名必須與請求方法名一一對應,即get-->GET post-->POST put-->PUT patch-->PATCH ...

4、路由條目的配置:路由與類檢視引用.as_view() 對映

示例:

class ProjectsView(View):

    def get(self, request, pk):
        data = {
            'id': pk,
            'name': 'xx專案',
            'leader': 'ppd'
        }
        data2 = [
            {
                'id': pk,
                'name': 'xx專案',
                'leader': 'ppd'
            },
            {
                
'id': 2, 'name': 'xx專案2', 'leader': 'ppd2' } ] json_str = json.dumps(data, ensure_ascii=False) """ 1、JsonResponse 是 HttpResponse的子類 2、HttpResponse接收的content必須是str或byte型別 3、JsonResponse用於返回json資料,接收的data可以是dict或巢狀dict的list,預設是dict 4、JsonResponse接收的data是list時,必須設定safe=False """ # return HttpResponse(json_str, content_type='application/json') # return JsonResponse(data, json_dumps_params={'ensure_ascii': False}) return JsonResponse(data2, json_dumps_params={'ensure_ascii': False}, safe=False) def post(self, request, pk): return HttpResponse("post") def put(self, request): return HttpResponse("put") def delete(self, request): return HttpResponse("delete")

路由配置示例:

urlpatterns = [
    # 1、定義檢視函式的路由:path(路由, 檢視函式名)
    path('index/', index),
    path('<int:pk>/', get_project),
    re_path(r'^name/(?P<name>\w{3})/$', project_name),
    # 2、定義檢視類的路由:path(路由, 檢視類名.as_view())
    path('project/<int:pk>/', ProjectsView.as_view())
]

三、函式檢視與類檢視對比:

1、函式檢視優點:好理解;缺點:程式碼可讀性與複用性不佳

2、類檢視優點:可讀性與複用性更好;不同的請求方式用不同的方法呈現(dispatch方法做了分發)

本部落格僅為本人學習過程中的記錄,歡迎一起交流經驗。