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库,对图片进行各种操作----参考资料:廖雪峰--PILPIL官方文档

我使用的功能简单,只是保存图片而已。代码:

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

   廖雪峰--PIL

============如有错误欢迎指正,转载请注明出处==============

  

												

django上传图片的更多相关文章

  1. django上传图片和文字记录

    直接上代码 html <form class="form-horizontal" id="upload-form"> <div class=& ...

  2. django上传图片简单验证以及自动修改图片名称

    django实现文件(图片)上传之后自动修改名称以及页面上传图片时的各种提醒: 1.先在你项目中添加一个文件夹如:system 在文件夹下添加__init__.py 和storage.py文件,并在s ...

  3. django 上传图片、使用PIL制作缩略图并保存到sea的storage

    上传图片解析: SAE的设置指引如下: 处理用户上传文件 在setttings.py中添加以下配置. # 修改上传时文件在内存中可以存放的最大size为10m FILE_UPLOAD_MAX_MEMO ...

  4. django学习记录

    1.参考资料问题: 现在django发布了1.11版本,离线文档下载引擎地址 文档下载地址 在线文档:https://docs.djangoproject.com/en/1.10/intro/tuto ...

  5. Django中MEDIA_ROOT和MEDIA_URL

    在django上传图片前端使用动态的配置方法 MEDIA_ROOT 代表着 要上传的路径会和你在models中写的上传的路径进行拼节形成最终文件上传的路径 MEDIA_URL主要就是映射了 在前端使用 ...

  6. 使用django的ImageField和from制作上传图片页面

    需求描述: 做一个简单的注册页面,使得用户在注册页上传头像. 解决办法: 以前用java写这个的时候,在action上面需要用IO接受文件,然后生成一个文件名,再将文件相对路径保存到user表的img ...

  7. Django中上传图片---避免因图片重名导致被覆盖

    上一篇文章中(https://www.cnblogs.com/lutt/p/10640412.html),我们以图片文件夹+图片名字的方式来储存图片,这样的做法会导致有重名的图片会导致之前的图片被覆盖 ...

  8. django使用ckeditor上传图片

    1.在模型类中设置字段为富文本类型,这里需要注意引入的是RichTextUploadingField,以允许上传图片,需要和RichTextField区分开 from ckeditor_uploade ...

  9. Django上传文件和上传图片(不刷新页面)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. 公司VPN信息

    公司VPN证书信息(请妥善留档本邮件) 管理 管理员 <admin@pansoft.com> 2016/12/12 11:00   收件人: huhuan@pansoft.com   × ...

  2. Leetcode 377. Combination Sum IV

    Given an integer array with all positive numbers and no duplicates, find the number of possible comb ...

  3. C#重构之道

    定义 重构的定义:在不改变软件可观察行为的前提下,改善其内部结构. 其中,不改变软件行为,是重构最基本的要求.要想真正发挥威力,就必须做到“不需了解软件行为”. 如果一段代码能让你容易了解其行为,说明 ...

  4. IOS定位

    #import "ViewController.h" #import <CoreLocation/CoreLocation.h> @interface ViewCont ...

  5. JQuery事件之鼠标事件

    鼠标事件是在用户移动鼠标光标或者使用任意鼠标键点击时触发的. ():click事件:click事件于用户在元素敲击鼠标左键,并在相同元素上松开左键时触发. $('p').click(function( ...

  6. 面试题目——《CC150》中等难题

    面试题17.1:编写一个函数,不用临时变量,直接交换两个数. 思路:使用差值或者异或 package cc150.middle; public class Exchange { public stat ...

  7. wait、notify、sleep、interrupt对比分析

    对比分析Java中的各个线程相关的wait().notify().sleep().interrupt()方法 方法简述 Thread类 sleep:暂停当前正在执行的线程:(类方法) yield:暂停 ...

  8. 使用Xcode HeaderDoc和Doxygen文档化你的Objective-C和Swift代码

    在一个应用的整个开发过程中涉及到了无数的步骤.其中一些是应用的说明,图片的创作,应用的实现,和实现过后的测试阶段.写代码可能组成了这个过程的绝大部分,因为正是它给了应用生命,但是这样还不够,与它同等重 ...

  9. [NHibernate]并发控制

    目录 写在前面 文档与系列文章 并发控制 乐观并发控制(Optimistic Concurrency) 一个例子 悲观并发控制(Pessimistic Concurrency) 总结 写在前面 上篇文 ...

  10. [nginx学习之道]linux的nginx安装

    准备:首先要安装下一些gcc库用于编译 和一些nginx的扩展lib包: [root@localhost nginx-]# yum -y install gcc gcc-c++ autoconf au ...