Python - Django - FBV 和 CBV
FBV:
Function Base View,基于函数的视图
views.py:
from django.shortcuts import render, HttpResponse # FBV def upload(request): if request.method == "POST": filename = request.FILES["upload_file"].name with open(filename, "wb") as f: for chunk in request.FILES["upload_file"].chunks(): f.write(chunk) return HttpResponse("上传OK") else: return render(request, "upload.html")
urls.py:
from django.conf.urls import url from app01 import views urlpatterns = [ url(r'^upload/', views.upload), # FBV ]
CBV:
Class Base View,基于类的视图
CBV 需要继承 Views,当有请求时,先执行 dispatch 函数,然后对请求方式的函数进行反射。例如,如果是 get 请求就执行类中的 get 函数
views.py:
from django.shortcuts import render, HttpResponse from django.views import View # CBV 需要继承 # CBV class Upload(View): # 定义 get 函数,用于处理 get 请求 def get(self, request): return render(request, "upload.html") # 定义 post 函数,用于处理 post 请求 def post(self, request): filename = request.FILES["upload_file"].name with open(filename, "wb") as f: for chunk in request.FILES["upload_file"].chunks(): f.write(chunk) return HttpResponse("上传OK")
urls.py:
from django.conf.urls import url from app01 import views urlpatterns = [ # url(r'^upload/', views.upload), # FBV url(r'^upload/', views.Upload.as_view()), # CBV ]
用 CBV 需要加上一个 .as_view()