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条件和循环的使用方法
Nov 01 Python
python迭代器的使用方法实例
Nov 21 Python
python写xml文件的操作实例
Oct 05 Python
Python中使用Inotify监控文件实例
Feb 14 Python
分享一个可以生成各种进制格式IP的小工具实例代码
Jul 28 Python
Python实现矩阵转置的方法分析
Nov 24 Python
Python中交换两个元素的实现方法
Jun 29 Python
influx+grafana自定义python采集数据和一些坑的总结
Sep 17 Python
Python2和Python3.6环境解决共存问题
Nov 09 Python
对Python的zip函数妙用,旋转矩阵详解
Dec 13 Python
python进程池实现的多进程文件夹copy器完整示例
Nov 27 Python
python em算法的实现
Oct 03 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
Excel数据导入Mysql数据库的实现代码
2008/06/05 PHP
php 删除cookie和浏览器重定向
2009/03/16 PHP
PHP下常用正则表达式整理
2010/10/26 PHP
PHP is_subclass_of函数的一个BUG和解决方法
2014/06/01 PHP
PHP ignore_user_abort函数详细介绍和使用实例
2014/07/15 PHP
php中base_convert()进制数字转换函数实例
2014/11/20 PHP
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
PHP实现批量上传单个文件
2015/12/29 PHP
thinkPHP实现将excel导入到数据库中的方法
2016/04/22 PHP
PHP正则匹配反斜杠'\'和美元'$'的方法
2017/02/08 PHP
通过PHP设置BugFree获取邮箱通知
2019/04/25 PHP
js获取本机的外网/广域网ip地址完整源码
2013/08/12 Javascript
使用js显示当前时间示例
2014/03/02 Javascript
jQuery实现异步获取json数据的2种方式
2014/08/29 Javascript
jQuery中contents()方法用法实例
2015/01/08 Javascript
JS实现适合于后台使用的动画折叠菜单效果
2015/09/21 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
VUE JS 使用组件实现双向绑定的示例代码
2017/01/10 Javascript
Vue.js基础学习之class与样式绑定
2017/03/20 Javascript
react router 4.0以上的路由应用详解
2017/09/21 Javascript
Python基本语法经典教程
2016/03/11 Python
Python enumerate索引迭代代码解析
2018/01/19 Python
Python线程创建和终止实例代码
2018/01/20 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
2018/01/24 Python
python字符串中匹配数字的正则表达式
2019/07/03 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
Python面向对象封装操作案例详解
2019/12/31 Python
Keras—embedding嵌入层的用法详解
2020/06/10 Python
python+playwright微软自动化工具的使用
2021/02/02 Python
python绘制高斯曲线
2021/02/19 Python
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
农民入党思想汇报
2014/01/03 职场文书
升学宴演讲稿
2014/09/01 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
MySQL性能压力基准测试工具sysbench的使用简介
2021/04/21 MySQL