4)django-视图

Posted 狼来的日子里!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4)django-视图相关的知识,希望对你有一定的参考价值。

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

1.视图方式     

  视图方式经常用的有两种  

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

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对应     

 2)如果以POST方式响应

        
        A)获取单行或者单选数据,比如input,radio,select
        request.POST.get("XX")获取数据
        
        B)获取多选数据,比如checkbox
        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里面

  

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

3.视图渲染方式

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

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

  

4.示例         

模板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")

 

以上是关于4)django-视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django Summernote 中显示编程片段的代码块?

Django REST框架--认证和权限

如何在recyclerview不同的项目点击上打开几个不同的片段?

Django 视图与网址

EditText 软键盘总是在视图寻呼机的片段上打开

Django之表单和类视图-Part 4