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()),
          ]
          
  • 相关阅读:
    巧妙设备MTU的大小,轻松提网速
    BackTrack5 (BT5)无线password破解教程之WPA/WPA2-PSK型无线password破解
    给程序猿简历的一些建议
    servlet的抽取
    BeanUtils工具类
    保存密码操作
    The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
    java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
    Wed Nov 01 13:03:16 CST 2017 WARN: Establishing SSL connection without server's identity verification is not recommended.
    修改web项目的启动页
  • 原文地址:https://www.cnblogs.com/yuncong/p/9944187.html
Copyright © 2011-2022 走看看