django1.8使用表单上传文件的实现方法


Posted in Python onNovember 04, 2016

Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。

Django是一个开放源代码的Web应用框架,由Python写成。

在django中我们可以采用Form类来处理表单,通过实例化处理和在模板中渲染,就可以轻松完成表单的需求,采用django的表单处理方式,能帮我们省去很多的工作,比如验证不能为空,或者要符合某种模式的输入才有效,这些处理起来非常方便,不用自己再单独写代码去验证表单的数据正确性,所以在开发中比较常用,Form提供了很多表单字段,比如日期,文本类型等,如果你熟悉基本的html,学起来会非常容易上手,所以今天我们不打算对每个表单的字段进行逐一说明,今天只说下表单文件的上传,因为这个类型比较特殊,需要一点特殊的处理,我们来创建一个简单的一个实例:

首先我们用Form创建一个简单的表单:

class UserForm(forms.Form):
username = forms.CharField(required=False)
headImg = forms.FileField()
class UserForm(forms.Form):
username = forms.CharField(required=False)
headImg = forms.FileField()

这个表单就2个字段,要求用户输入用户名和上传一个文件或图片。

接下来我们放到模板中去渲染,这时候就可以看到一个基本表单了,视图函数如下:

def register(request):
if request.method == "POST":
uf = UserForm(request.POST, request.FILES)
if uf.is_valid():
#放上传文件的代码
return HttpResponse('ok')
else:
uf = UserForm()
return render(request, 'register.html', {'uf': uf})
def register(request):
if request.method == "POST":
uf = UserForm(request.POST, request.FILES)
if uf.is_valid():
#放上传文件的代码
return HttpResponse('ok')
else:
uf = UserForm()
return render(request, 'register.html', {'uf': uf})

这个函数判断用户的是否为POST请求,如果是并验证是有效的,然后就返回OK,在验证正确和返回OK的中间放我们的上传文件代码,因为只有文件上传成功能返回OK,我们一会说,如果是GET请求,就直接显示一个空表单,让用户输入。

处理上传文件就是往服务器上生成一个文件,并将上传的文件内容写到新的文件中,所以它的基本函数是这样的,接收上传文件对象为参数,然后本地打开一个文件,从上传的文件中读出文件,写入新的文件中,代码如下:

def handle_uploaded_file(f):
with open('/server/testform/upload/' + f.name, 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
def handle_uploaded_file(f):
with open('/server/testform/upload/' + f.name, 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)

有了这个上传文件的处理函数,我们就可以进一步完善我们的视图函数里,最终的代码如下:

def register(request):
if request.method == "POST":
uf = UserForm(request.POST, request.FILES)
if uf.is_valid():
handle_uploaded_file(request.FILES['headImg'])
return HttpResponse('ok')
else:
uf = UserForm()
return render(request, 'register.html', {'uf': uf})
def register(request):
if request.method == "POST":
uf = UserForm(request.POST, request.FILES)
if uf.is_valid():
handle_uploaded_file(request.FILES['headImg'])
return HttpResponse('ok')
else:
uf = UserForm()
return render(request, 'register.html', {'uf': uf})

这样就完成了一个文件的上传,完毕。

以上所述是小编给大家介绍的django1.8使用表单上传文件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Linux下编译安装MySQL-Python教程
Feb 02 Python
Python求解平方根的方法
Mar 11 Python
Python实现简单HTML表格解析的方法
Jun 15 Python
详解在Python的Django框架中创建模板库的方法
Jul 20 Python
快速排序的算法思想及Python版快速排序的实现示例
Jul 02 Python
JSON Web Tokens的实现原理
Apr 02 Python
python中的break、continue、exit()、pass全面解析
Aug 05 Python
Python探索之静态方法和类方法的区别详解
Oct 27 Python
python实现键盘控制鼠标移动
Nov 27 Python
PyQt5实现五子棋游戏(人机对弈)
Mar 24 Python
python爬虫 线程池创建并获取文件代码实例
Sep 28 Python
python几种常用功能实现代码实例
Dec 25 Python
Python+MongoDB自增键值的简单实现
Nov 04 #Python
基于Python的接口测试框架实例
Nov 04 #Python
浅谈Python爬取网页的编码处理
Nov 04 #Python
Django接受前端数据的几种方法总结
Nov 04 #Python
Python多维/嵌套字典数据无限遍历的实现
Nov 04 #Python
浅谈Python数据类型判断及列表脚本操作
Nov 04 #Python
浅谈python字典多键值及重复键值的使用
Nov 04 #Python
You might like
smarty模板引擎中变量及变量修饰器用法实例
2015/01/22 PHP
使用PHP+AJAX让WordPress动态加载文章的教程
2015/12/11 PHP
php文件上传后端处理小技巧
2016/05/22 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
php判断/计算闰年的方法小结【三种方法】
2019/07/06 PHP
获取DOM对象的几种扩展及简写
2006/10/09 Javascript
JavaScript的面向对象(二)
2006/11/09 Javascript
JQuery模板插件 jquery.tmpl 动态ajax扩展
2011/11/10 Javascript
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
Js 去掉字符串中的空格(实现代码)
2013/11/19 Javascript
JS事件在IE与FF中的区别详细解析
2013/11/20 Javascript
jQuery页面刷新(局部、全部)问题分析
2016/01/09 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
Angular2.0/4.0 使用Echarts图表的示例代码
2017/12/07 Javascript
详解jQuery中的isPlainObject()使用方法
2018/02/27 jQuery
对vue下点击事件传参和不传参的区别详解
2018/09/15 Javascript
jQuery实现动态添加和删除input框实例代码
2019/03/26 jQuery
vue2之简易的pc端短信验证码的问题及处理方法
2019/06/03 Javascript
vue data引入本地图片的两种方式小结
2019/11/13 Javascript
vue-cli3使用mock数据的方法分析
2020/03/16 Javascript
vue 限制input只能输入正数的操作
2020/08/05 Javascript
Python 开发Activex组件方法
2009/11/08 Python
Python urlopen()函数 示例分享
2014/06/12 Python
django1.8使用表单上传文件的实现方法
2016/11/04 Python
python django使用haystack:全文检索的框架(实例讲解)
2017/09/27 Python
基于Python在MacOS上安装robotframework-ride
2018/12/28 Python
pytorch的batch normalize使用详解
2020/01/15 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
python使用pandas抽样训练数据中某个类别实例
2020/02/28 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
《美丽的丹顶鹤》教学反思
2014/04/22 职场文书
课外活动总结范文
2014/07/09 职场文书
2015年毕业生个人自荐书
2015/03/24 职场文书
请学会珍惜眼前,因为人生没有下辈子!
2019/11/12 职场文书
关于springboot配置druid数据源不生效问题(踩坑记)
2021/09/25 Java/Android