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 中显示编程片段的代码块?