django上传图片
django修改头像的功能...
1.在表单中加入enctype="multipart/form-data;
关于表单中enctype的介绍:http://www.w3school.com.cn/tags/att_form_enctype.asp
处理表单的视图会在request中接受到上传文件的数据。FILES是个字典,它包含每个FileField的键
(或者ImageField,FileField的子类)。这样的话就可以用request.FILES['File']来存放表单中的这些数据了。
注意request.FILES只有在请求方法为POST,并且发送请求的<form>拥有enctype="multipart/form-data属性时,
才会包含数据。否则request.FILES为空
如下图所示:
提交后显示图片信息:
如果不加enctype="multipart/form-data:得不到图片信息,只有路径
2.上传图片
由于model中photo字段存储的是路径,所以首先要把图片保存在图片对应的文件夹下。
保存图片中使用到了PIL库,对图片进行各种操作----参考资料:廖雪峰--PIL;PIL官方文档
我使用的功能简单,只是保存图片而已。代码:
photo=request.FILES['photo'] if photo:
phototime= request.user.username+str(time.time()).split('.')[0]
photo_last=str(photo).split('.')[-1]
photoname='photos/%s.%s'%(phototime,photo_last)
img=Image.open(photo)
img.save('media/'+photoname)
3.将图片路径更新到数据库
调用update()方法即可。
注:update()方法对于任何结果集(QuerySet)均有效。通过get()方法的到的不是QuerySet,
所以,不可以update,另外get()方法达不到数据和返回条数大于1条的时候都会报错。
print type( UserInfo.objects.get(id=userinfo_id)) ---> <class 'Account.models.UserInfo'> print type( UserInfo.objects.filter(id=userinfo_id))----> <class 'django.db.models.query.QuerySet'>
相关代码如下:
models.py
class UserInfo(models.Model):
user=models.OneToOneField(User)
photo=models.ImageField(upload_to='photos',default='user1.jpg')
def __unicode__(self):
return self.user.username
html代码
<form action="/updateinfo" method="POST" enctype="multipart/form-data"> <div class="updateImg">
<img src="{{ account.photo.url }}" alt=""/> </div> <input name="photo" type="file" id="exampleInputFile">
<button id="photo" class="btn btn-danger" type="submit">上传头像</button>
views.py
def updateInfo(request):
if request.method=='POST':
photo=request.FILES['photo'] if photo:
phototime= request.user.username+str(time.time()).split('.')[0]
photo_last=str(photo).split('.')[-1]
photoname='photos/%s.%s'%(phototime,photo_last)
img=Image.open(photo)
img.save('media/'+photoname) count=UserInfo.objects.filter(user=request.user).update(
photo=photoname
)
if count:
# 设置一个session,然后跳转到对应的页面,此处简易写写
return HttpResponse('上传成功')
else:
return HttpResponse('上传失败') return HttpResponse('图片为空')
参考:http://bluecrystal.iteye.com/blog/233030
http://python.usyiyi.cn/django/index.html
============如有错误欢迎指正,转载请注明出处==============
django上传图片的更多相关文章
- django上传图片和文字记录
直接上代码 html <form class="form-horizontal" id="upload-form"> <div class=& ...
- django上传图片简单验证以及自动修改图片名称
django实现文件(图片)上传之后自动修改名称以及页面上传图片时的各种提醒: 1.先在你项目中添加一个文件夹如:system 在文件夹下添加__init__.py 和storage.py文件,并在s ...
- django 上传图片、使用PIL制作缩略图并保存到sea的storage
上传图片解析: SAE的设置指引如下: 处理用户上传文件 在setttings.py中添加以下配置. # 修改上传时文件在内存中可以存放的最大size为10m FILE_UPLOAD_MAX_MEMO ...
- django学习记录
1.参考资料问题: 现在django发布了1.11版本,离线文档下载引擎地址 文档下载地址 在线文档:https://docs.djangoproject.com/en/1.10/intro/tuto ...
- Django中MEDIA_ROOT和MEDIA_URL
在django上传图片前端使用动态的配置方法 MEDIA_ROOT 代表着 要上传的路径会和你在models中写的上传的路径进行拼节形成最终文件上传的路径 MEDIA_URL主要就是映射了 在前端使用 ...
- 使用django的ImageField和from制作上传图片页面
需求描述: 做一个简单的注册页面,使得用户在注册页上传头像. 解决办法: 以前用java写这个的时候,在action上面需要用IO接受文件,然后生成一个文件名,再将文件相对路径保存到user表的img ...
- Django中上传图片---避免因图片重名导致被覆盖
上一篇文章中(https://www.cnblogs.com/lutt/p/10640412.html),我们以图片文件夹+图片名字的方式来储存图片,这样的做法会导致有重名的图片会导致之前的图片被覆盖 ...
- django使用ckeditor上传图片
1.在模型类中设置字段为富文本类型,这里需要注意引入的是RichTextUploadingField,以允许上传图片,需要和RichTextField区分开 from ckeditor_uploade ...
- Django上传文件和上传图片(不刷新页面)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- 代码生成工具——Entity Framework Power Tools
Entity Framework Power Tools是VS上的一个根据数据库生成Model的Code First映射工具.在VS里面右键即可看到.什么,没有? 别慌,可以单独下载的,见 https ...
- 【Python】[面向对象高级编程] 使用__slots__,使用@property
1.使用 __slots__ 给实例绑定方法, >>> def set_age(self, age): # 定义一个函数作为实例方法 ... self.age = age .. ...
- Android四大组件之—— BroadcastReceiver的使用
BroadcastReceiver又名广播接收者.既然它用于接收广播,那一定就有人负责发送. Android系统中的广播: 在现实生活中,我们都知道广播是什么,用来做什么.例如公园里的广播,主要通知游 ...
- elipse 从eclipse导入maven项目
1. 使用Eclipse通过Svn导入项目 2.cmd 在项目目录下执行 mvn eclipse:eclipse 3. 然后在项目上点击右键 configure ->convert to mav ...
- Mysql 命令大全
1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root - ...
- Python【第一章】:简介和入门
ython简介 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承.之 ...
- Finite State Machine 是什么?
状态机(Finite State Machine):状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动 作.完成特定操作的控制中心. 类 ...
- jQuery倒计时插件
倒计时jQuery插件 引言 最近又换工作了,还不错,我换工作的次数其实有点频繁,2014年7月份毕业,到现在工作已经换了3份了,工资跟刚毕业时候相比也涨了点儿,最近一次换工作我离开了深圳,来到了北京 ...
- Linux 内核数据结构:双向链表
Linux 内核提供一套双向链表的实现,你可以在 include/linux/list.h 中找到.我们以双向链表着手开始介绍 Linux 内核中的数据结构 ,因为这个是在 Linux 内核中使用最为 ...
- BZOJ3168: [Heoi2013]钙铁锌硒维生素
设$A^TC=B^T$,这样$C_{ij}$表示$B_j$的线性表出需要$A_i$,那么$B_j$可以替换$A_i$,根据$C=(A^T)^{-1}B^T$求出$C$.要求字典序最小完美匹配,先求任意 ...