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 30 Python
python使用PyGame模块播放声音的方法
May 20 Python
python GUI实例学习
Nov 21 Python
Python基础教程之内置函数locals()和globals()用法分析
Mar 16 Python
windows下添加Python环境变量的方法汇总
May 14 Python
对python抓取需要登录网站数据的方法详解
May 21 Python
对python中的高效迭代器函数详解
Oct 18 Python
Python一个简单的通信程序(客户端 服务器)
Mar 06 Python
Django中使用极验Geetest滑动验证码过程解析
Jul 31 Python
浅析python标准库中的glob
Mar 13 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
Jun 09 Python
完美处理python与anaconda环境变量的冲突问题
Apr 07 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
phpmyadmin 常用选项设置详解版
2010/03/07 PHP
php 文本文件的读取效率
2012/02/10 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
2014/06/26 PHP
PHP内核探索:哈希表碰撞攻击原理
2015/07/31 PHP
PHP简单读取PDF页数的实现方法
2016/07/21 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
Javascript SHA-1:Secure Hash Algorithm
2006/12/20 Javascript
找出字符串中出现次数最多的字母和出现次数精简版
2012/11/07 Javascript
浅谈javascript中call()、apply()、bind()的用法
2015/04/20 Javascript
Javascript中String的常用方法实例分析
2015/06/13 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
2016/05/09 Javascript
H5移动端图片压缩上传开发流程
2016/11/09 Javascript
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
promise处理多个相互依赖的异步请求(实例讲解)
2017/08/03 Javascript
基于vue实现圆形菜单栏组件
2019/07/05 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
在antd4.0中Form使用initialValue操作
2020/11/02 Javascript
python3设计模式之简单工厂模式
2017/10/17 Python
django的登录注册系统的示例代码
2018/05/14 Python
python 重命名轴索引的方法
2018/11/10 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
pygame实现贪吃蛇游戏(上)
2019/10/29 Python
Python利用for循环打印星号三角形的案例
2020/04/12 Python
python实现飞船游戏的纵向移动
2020/04/24 Python
Python内置方法和属性应用:反射和单例(推荐)
2020/06/19 Python
python如何停止递归
2020/09/09 Python
HTML5 canvas基本绘图之绘制曲线
2016/06/27 HTML / CSS
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
《我的伯父鲁迅先生》教学反思
2014/02/12 职场文书
合作协议书范文
2014/08/20 职场文书
2015年女职工工作总结
2015/05/15 职场文书
《比尾巴》教学反思
2016/02/24 职场文书
离婚协议书范文2016
2016/03/18 职场文书
《初涉尘世》读后感3篇
2020/01/10 职场文书
MySQL通过binlog恢复数据
2021/05/27 MySQL