zoukankan      html  css  js  c++  java
  • Django之视图

    Django视图

    • 基于nazha老师:http://www.cnblogs.com/liwenzhou/articles/8305104.html

    • 前言:对于对小数据的处理,可以直接使用Django内置的数据库sqlite3,

      • sqlite: 是一种文件数据库,使用单独一个文件保存数据
      • 多用于嵌入式,该文件中类似于mysql也存在很多表
      • 在pycharm中连接sqlite3,与mysql类似,首次使用需要在下载驱动
    • 视图函数(类)简称为视图,是一个简单的Python函数(类),接受web请求并返回web响应

    • FBV(Function Base View) 和CBV(Class Base View)

      • FBV是基于函数的视图

        • 视图函数中通过request.method 的不同进而执行不同的代码

        • 实例代码

          • # 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 基于类的视图

        • 视图类必须继承 django.views.view

        • 在类中定义与请求方法同名的方法

        • 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), "
          ", "文件名字", 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()),
          ]
          
  • 相关阅读:
    Mayan游戏 (codevs 1136)题解
    虫食算 (codevs 1064)题解
    靶形数独 (codevs 1174)题解
    黑白棋游戏 (codevs 2743)题解
    神经网络 (codevs 1088) 题解
    The Rotation Game (POJ 2286) 题解
    倒水问题 (codevs 1226) 题解
    银河英雄传说 (codevs 1540) 题解
    生日蛋糕 (codevs 1710) 题解
    第一章 1.11 高阶函数
  • 原文地址:https://www.cnblogs.com/yuncong/p/9944187.html
Copyright © 2011-2022 走看看