Django之視圖

Django視圖

  • 基於nazha老師:http://www.cnblogs.com/liwenzhou/articles/8305104.htmlhtml

  • 前言:對於對小數據的處理,能夠直接使用Django內置的數據庫sqlite3,python

    • sqlite: 是一種文件數據庫,使用單獨一個文件保存數據
    • 多用於嵌入式,該文件中相似於mysql也存在不少表
    • 在pycharm中鏈接sqlite3,與mysql相似,首次使用須要在下載驅動
  • 視圖函數(類)簡稱爲視圖,是一個簡單的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. request.method 請求中使用的HTTP方法的字符串表示,全大寫
      2. request.path_info 返回用戶訪問的url,不包括域名
      3. request.get_full_path() 獲取URL,帶參數
      4. request.GET 包含全部HTTP GET參數的類字典對象
        1. request.POST.get()
        2. request.POST.getlist()
      5. reques.POST 包含全部HTTP POST參數的類字典對象
      6. request.body 請求體,byte類型 request.POST的數據就是從body裏面提取到的
      7. request.META
      8. request.FILES 獲取到上傳文件的的類字典
        1. request.FILES.get()
        2. request.FILES.getlist() 上傳多個文件
    • 上傳文件實例

      • 1.from表單必須設置 method="POST" action="" enctype="multipart/form-data"

      • 2.file_obj = request.FILES.get("xxx")

      • 3.file_obj.name

      • 4.在本地保存文件

        • chunks(chunk_size=自定義字節大小),有chunk_size參數,能夠自定義每次接收多少
      • # 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()),
        ]
相關文章
相關標籤/搜索