基於nazha老師:http://www.cnblogs.com/liwenzhou/articles/8305104.htmlhtml
前言:對於對小數據的處理,能夠直接使用Django內置的數據庫sqlite3,python
視圖函數(類)簡稱爲視圖,是一個簡單的Python函數(類),接受web請求並返回web響應mysql
FBV(Function Base View) 和CBV(Class Base View)web
FBV是基於函數的視圖sql
視圖函數中經過request.method 的不一樣進而執行不一樣的代碼數據庫
實例代碼django
# views.py中 FBV版添加班級 def add_class(request): if request.method == "POST": class_name = request.POST.get("class_name") models.Classes.objects.create(name=class_name) return redirect("/class_list/") return render(request, "add_class.html") # urls.py 中 from app01 import views urlpatterns = [ url(r'^add_class/$', views.add_class) ]
CBV 基於類的視圖app
視圖類必須繼承 django.views.view函數
在類中定義與請求方法同名的方法post
urls.py中註冊視圖的時候區別於FBV要寫成 類名.as_view()
實例代碼
# views.py 中 CBV版添加代碼 from django.views import View class add_class(View): def get(self, request): return render(request, "add_class.html") def post(self, request): class_name = request.POST.get("class_name") models.Classes.objects.create(name=class_name) return credits("/class_list/") # url.py 中 urlpatterns = [ url(r"^add_class/$", view.add_class.as_views()) ]
Request對象和Response對象
request對象的屬性和方法
上傳文件實例
1.from表單必須設置 method="POST" action="" enctype="multipart/form-data"
2.file_obj = request.FILES.get("xxx")
3.file_obj.name
4.在本地保存文件
# views.py中上傳代碼 class Upload2(View): def get(self, request): return render(request, "upload2.html") def post(self, request): name = request.POST.get("name") print(name, "#"*129) filename_obj = request.FILES.get("filename") # 獲取上傳文件的對象 filename_name = filename_obj.name # 在對象中獲取上傳文件的名字 print("文件對象:",filename_obj, "文件對象類型:", type(filename_obj), "\n", "文件名字", filename_name, "文件名類型", type(filename_name)) # 文件對象: 323088.jpg 文件對象類型: <class 'django.core.files.uploadedfile.InMemoryUploadedFile'> with open(filename_name, "wb") as f1: for i in filename_obj.chunks(): # chunks() 一種內置的方法,括號內有chunk_size參數,能夠自定義每次接收多少, 與for i in filename_obj: 區別不大 f1.write(i) else: return HttpResponse("上傳完畢")
# urls.py 中的代碼 from app01 import views urlpatterns = [ # url(r"^add_class", views.add_class.as_views()), ]