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 相关文章推荐
Python中pygame的mouse鼠标事件用法实例
Nov 11 Python
Python中Scrapy爬虫图片处理详解
Nov 29 Python
Python设计模式之抽象工厂模式原理与用法详解
Jan 15 Python
Pyqt5 基本界面组件之inputDialog的使用
Jun 25 Python
python判断无向图环是否存在的示例
Nov 22 Python
python实现修改固定模式的字符串内容操作示例
Dec 30 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
Jun 14 Python
python编写实现抽奖器
Sep 10 Python
详解基于python的图像Gabor变换及特征提取
Oct 26 Python
PyTorch中clone()、detach()及相关扩展详解
Dec 09 Python
python 基于opencv实现图像增强
Dec 23 Python
python中remove函数的踩坑记录
Jan 04 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
php 执行系统命令的方法
2009/07/07 PHP
DedeCMS dede_channeltype表字段注释
2010/04/07 PHP
ajax 的post方法实例(带循环)
2011/07/04 PHP
php准确计算复活节日期的方法
2015/04/18 PHP
php强制下载文件函数
2016/08/24 PHP
QQ邮箱的一个文本编辑器代码
2007/03/14 Javascript
Date对象格式化函数代码
2010/07/17 Javascript
JavaScript 用cloneNode方法克隆节点的代码
2012/10/15 Javascript
js获取视频时长代码
2014/04/10 Javascript
浅谈Cookie的生命周期问题
2016/08/02 Javascript
详解webpack异步加载业务模块
2017/06/23 Javascript
JS实现div模块的截图并下载功能
2017/10/17 Javascript
浅谈webpack组织模块的原理
2018/03/10 Javascript
React中使用UEditor百度富文本的方法
2018/08/22 Javascript
vue生成文件本地打开查看效果的实例
2018/09/06 Javascript
[01:03:27]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python中模块string.py详解
2017/03/12 Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
2019/05/29 Python
python pygame实现滚动横版射击游戏城市之战
2019/11/25 Python
Python实现代码块儿折叠
2020/04/15 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
2020/05/07 Python
Python编写单元测试代码实例
2020/09/10 Python
网站性能延迟加载图像的五种技巧(小结)
2020/08/13 HTML / CSS
美体小铺英国官网:The Body Shop英国
2017/01/24 全球购物
ProBikeKit新西兰:自行车套件,跑步和铁人三项装备
2017/04/05 全球购物
美国特价机票专家:Airfarewatchdog
2018/01/24 全球购物
介绍一下grep命令的使用
2015/06/12 面试题
介绍一下javax.servlet.Servlet接口及其主要方法
2015/11/30 面试题
自荐信格式范文
2013/10/07 职场文书
升职自荐书范文
2013/11/28 职场文书
十八届三中全会学习方案
2014/02/16 职场文书
酒店爱岗敬业演讲稿
2014/09/02 职场文书
消防安全主题班会
2015/08/12 职场文书
妇联2016年六一国际儿童节活动总结
2016/04/06 职场文书
总结Java对象被序列化的两种方法
2021/06/30 Java/Android
docker 制作mysql镜像并自动安装
2022/05/20 Servers