zoukankan      html  css  js  c++  java
  • 4)django-视图view

    视图是django功能函数,结合url使用

    1.视图方式     

      视图方式经常用的有两种  

      用户GET获取数据
         用户POST提交数据
        
           用户第一次访问页面是GET
           用户第交表单是POST
           视图:可以通过request.method判断是请求方式

      django常用的方法:

      reqeust.method

      request.body封装了很多请求内容信息,比如GET,POST等

      request.GET

      request.POST GET和POST都是从body拿的内容,body还其他方法如delete,put等提交方式

      request.path_info

      request.FILES

      request.Cookie

      request.META封装了很多请求头信息

    2.获取用户请求数据    

      1)如果用户以GET方式访问         

          视图request.GET.get("xx")获取数据,此数据包含在请求头,即URL中。
            
            http://127.0.0.1:8000/login?id=3
        
            views.py
            request.GET.get("id") id和URL中的id对应     

      

        def detail(request):
          id=request.GET.get("id")
          return  render(request,"detail.html",{"detail_info":USER_DICT.get(id)})

     2)如果以POST方式响应

            
            A)获取单行或者单选数据,比如input,radio,select(单选)
            request.POST.get("XX")获取数据
            
            B)获取多选数据,比如checkbox,select(多选)
            request.POST.getlist("xxx")

            C)上传文件

      request.FILES#当上传文件的时候所有 文件内容都到了FILES,包括文件名。

      当form没有设置enctype="multipart/form-data

         f=request.POST.get("fafafa") #s可以拿到文件名

         而request.FILES.get("fafafa")#这里会返回是一个None

      当form设置enctype="multipart/form-data

        enctype="multpart/form-data"模式下:input内容会放到POST里面,file会放到FILE里面

            # 需要在 form中设置enctype="multpart/form-data",如果没有enctype上传的时候只是字符串,如果加了上传内容,所f=request.POST.get("fafafa")会显示None
            #enctype="multpart/form-data"模式下:input内容会放到POST里面,file会放到FILE里面

      file其他方法

      文件对象 = reqeust.FILES.get()
      文件对象.name
      文件对象.size
      文件对象.chunks()表示一点一点上传

    obj = request.FILES.get('fafafa')
    obj.name
    f = open(obj.name, mode='wb')
    for item in obj.chunks():
      f.write(item)
    f.close()

    3.视图渲染方式

      导入模块

     from django.shortcuts import render,HttpResponse,redirect

      return HttpRespone("字符串")       #直接返回字符串
            return render(request,"模板的文件的路径")    #渲染到页面,第二个参数是html模块路径
            return redirect("只能URL路径")           #跳转,不能直接写"html模块路径",因为拿不到别人的模板路径,

                         所以这里应该写URL路径比如:“http://www.baidu.com”,或者本地URL"/home"

    4.什么时候渲染

      

    在渲染之前替换,所以html拿到都是渲染好的
        def func(request):
            return render(request,"index.html",{"current_user":"alex"})
        
        <div>{{current_user}}</div> 
        最后生成字符串
        <div>alex</div> 
    什么时候变替换:在
    渲染之前替换,所以html拿到都是渲染好的

      

    5.示例         

    模板HTML代码login.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <form action="/login/" method="post" enctype="multipart/form-data">
        <p>
            <input type="text" name="username" placeholder="用户名"/>
        </p>
        <p>
            <input type="password" name="password" placeholder="密码"/>
        </p>
        <p>
            男:<input type="radio" name="gender" value="1"/>
            女:<input type="radio" name="gender" value="2"/>
        </p>
        <p>
            男:<input type="checkbox" name="favor" value="11"/>
            女:<input type="checkbox" name="favor" value="22"/>
        </p>
        <p>
            <select name="city1">
                <option value="111">上海</option>
                <option value="111">北京</option>
                <option value="111">深圳</option>
            </select>
        </p>
    
            <p>
            <select name="city2" multiple="multiple">
                <option value="111">上海</option>
                <option value="111">北京</option>
                <option value="111">深圳</option>
            </select>
        </p>
        <p>
            <input type="file" name="fafafa">
        </p>
        <input type="submit" value="提交">
    </form>
    </body>
    </html>

      views.py

    def login(request):
        if request.method=="GET":
            return render(request,"login.html")
        elif request.method=="POST":
            u=request.POST.get("username")
            p=request.POST.get("password")
    
            #radis
            r=request.POST.get("gender")
            print(r)
            #获取checkbox
            c1=request.POST.get("favor")
            c2=request.POST.getlist("favor")
            print(c1,c2)
    
    
            # f=request.POST.get("fafafa") #默认只能拿到文件名
            # fc=request.FILES#当上传文件的时候所有内容都到了FILES,包括文件名
            # f1=request.FILES.get("fafafa")#这里会返回是一个None,
            # 需要在 form中设置enctype="multpart/form-data",如果没有enctype上传的时候只是字符串,如果加了上传内容,所f=request.POST.get("fafafa")会显示None
            #enctype="multpart/form-data"模式下:input内容会放到POST里面,file会放到FILE里面
            # print(f,fc,f1)
            # print(f)
    
            f1=request.FILES.get("fafafa") #打印出来像字符串,其实是django.core.files.uploadedfile.InMemoryUploadedFile,f1.name属性== InMemoryUploadedFile,有__repr__()
            print(f1,type(f1),f1.name)
            f1.chunks()#表示一点点取文件
    
            f=open(f1.name,mode='wb')
            for i in f1.chunks():
                f.write(i)
    
            f.close()
    
            if u=="root" and p=="123":
                return redirect("/index/")
            else:
                return render(request,"login.html")
  • 相关阅读:
    iOS 微信分享提示 未验证应用
    iOS 升级xcode12后原项目模拟器运行报错
    ZK进程监控
    kakafka
    mysql 通过使用联全索引优化Group by查询
    4. php反序列化从入门到放弃(放弃篇)
    微慕小程序专业版V3.5发布-小商店
    C++ Singleton模式
    C语言的clone与mmap调用
    InnoDB MVCC机制
  • 原文地址:https://www.cnblogs.com/lixiang1013/p/7747893.html
Copyright © 2011-2022 走看看