Django里面,通过Html页面提交的数据,可以通过在View里面定义的函数通过request参数获取。简单的说,主要可以分出3种情况。


HTML页面传递来的单个数据, 比如radiobox或者text 可以通过request.POST.get获取

HTML页面传递来多个数据,比如checkbox或者option, 可以通过request.POST.getlist获取

HTML页面上传了一个文件,html端需要表明enctype,表示这是一个文件而不是字符串;后台需要通过request.FILES.get获取这个文件的地址,然后通过chunk分块写入指定的地址


现在来看看实例:

HTML页面

upload.html

<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><body><formaction="/upload/"method="POST"enctype="multipart/form-data"><p><inputtype="text"name="user"placeholder="用户名"/></p><p><inputtype="password"name="pwd"placeholder="密码"/></p><p>性别:男<inputtype="radio"name="gender"value="1"/>女<inputtype="radio"name="gender"value="2"/>中<inputtype="radio"name="gender"value="3"/></p><p>爱好:音乐<inputtype="checkbox"name="favor"value="11"/>武术<inputtype="checkbox"name="favor"value="22"/>电玩<inputtype="checkbox"name="favor"value="33"/></p><p><selectname="city"multiple><optionvalue="sh">上海</option><optionvalue="bj">北京</option><optionvalue="tj">天津</option></select></p><p><inputtype="file"name="fafafa"enctype="multpart/form-data"/></p><inputtype="submit"value="提交"/></form></body></html>


视图函数

view.py

defupload(request):ifrequest.method=="GET":returnrender(request,'upload.html')elifrequest.method=="POST":v=request.POST.get('user')print(v)#radiov=request.POST.get('gender')print(v)v=request.POST.getlist('favor')print(v)v=request.POST.getlist('city')print(v)obj=request.FILES.get('fafafa')print(obj,type(obj),obj.name)importosfile_path=os.path.join('upload',obj.name)print(file_path)f=open(file_path,mode="wb")foriinobj.chunks():f.write(i)f.close()fromdjango.core.files.uploadedfileimportInMemoryUploadedFilereturnrender(request,'upload.html')else:#PUT,DELETE,HEAD,OPTION...returnredirect('/upload/')


界面


输入下面的值进行提交

成功获取结果


Systemcheckidentifiednoissues(0silenced).July06,2017-15:25:56Djangoversion1.11,usingsettings'Django.settings'Startingdevelopmentserverathttp://127.0.0.1:8000/QuittheserverwithCTRL-BREAK.阿拉丁2['22','33']['bj','tj']statements.pdf<class'django.core.files.uploadedfile.InMemoryUploadedFile'>statements.pdfupload\statements.pdf[06/Jul/201715:26:10]"POST/upload/HTTP/1.1"2001267


确认成功上传文件