图片上传首先要是设置settings.py文件(与静态文件设置类似)

MEDIA_ROOT = os.path.join(BASE_DIR,'media')
MEDIA_URL = '/media/'

1、需要用到imagekit软件
安装使用imagekit需要以下三步:
1)Install PIL or Pillow. (If you’re using an ImageField in Django, you should have already done this.)
2)pip install django-imagekit
3)Add 'imagekit' to your INSTALLED_APPS list in your project’s settings.py

2、编写models.py

from django.db import models
from imagekit.models import ProcessedImageField
from imagekit.processors import ResizeToFill

#上传图片后进行处理的
class Profile(models.Model):
avatar_thumbnail = ProcessedImageField(upload_to='uploaded', #图片上传后的目录会在主目录media(settings.py中设置)下自动创建
processors=[ResizeToFill(100, 50)], #值可以改,现在是100*50的缩略图,也可以是360*300的放大图
format='JPEG',
options={'quality': 60},storage=ImageStorage())
name = models.CharField(max_length=128)
def __str__(self):
return '%s' %(self.name)

3、views实现

#上传的图片经过处理后保存的
@csrf_exempt
def ProcessImg(request):
if request.method == 'POST':
if request.FILES.get('img'): #img为upload.html中的input标签名称
new_img = models.Profile(
avatar_thumbnail = request.FILES.get('img'),
name = request.FILES.get('img').name
)
# new_img = models.Upload_img(
# img = request.FILES.get('img'),
# name = request.FILES.get('img').name
# )
type_list = ['.jpg','.png','.gif','.webp']
#判断上传图片格式
if os.path.splitext(new_img.name)[1].lower() in type_list:
new_img.save()
return render(request,'blog1/processupload.html')

4、模板processupload.html(只写了上传功能的html代码)

{% block content %}
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
<input id="uploadimg" type="file" name="img" />
<button type="submit" onclick="submit_successful()">上传</button>
<p id="tip"></p>
<script>

function submit_successful()
{
var x = document.getElementById('uploadimg');
if (x.value == ''){
alert('上传失败,请选择要上传的图片!')

}
else
{
var AllowExt=['.jpg','.gif','.png','.webp'];
<!-- 获取图片格式:.jpg,.png -->
var FileExt=x.value.substr(x.value.lastIndexOf(".")).toLowerCase();
<!-- 判断一个字符串是否在数组中 -->
if (AllowExt.toString().indexOf(FileExt) > -1){

alert('上传成功!!!');

}
else
{
alert('上传失败,上传文件格式为:(.jpg,.png,.gif,.webp),当前格式为:'+FileExt+'请重新上传!');
}
}

}
</script>
</form>
{% endblock %}
5、urls.py中添加一条地址匹配

path('processupload/',views.ProcessImg), #django2.0版本用path

现在就可以去页面访问并测试上传图片功能了。

这里只介绍了imagekit的一种使用方式,想了解更多可以参阅http://django-imagekit.readthedocs.io/en/latest/#specs。

还有另一app可以修改图片,详情请参阅:http://easy-thumbnails.readthedocs.io/en/latest/usage/#python

django实现图片上传后自动修改尺寸并保存修改后的图到数据库和本地文件系统的更多相关文章

  1. Django实现图片上传并前端页面显示

    Django实现图片上传和图片显示 开始之前我们先确认环境中已经安装了Pillow,如果没有安装,可以通过pip install Pillow来安装,这个是python的图像处理库 数据库设置 我们创 ...

  2. Django配置图片上传

    本文首先实现django中上传图片的过程,然后解决富文本编辑器文件上传的问题. 一. 上传图片 1.在 settings.py 中配置MEDIA_URL  和 MEDIA_ROOT 在 D:\blog ...

  3. Express+MySQL实现图片上传到服务器并把路径保存到数据库中

    demo准备:mysql5.7.20 express4.0 处理图片文件的中间件Multer 先搭建服务器并展示html页面 const express = require("express ...

  4. Django xadmin图片上传与缩略图处理

    基本摘要 用python django开发时,个人选中Xadmin后台管理系统框架,因为它*内置功能丰富, 不仅提供了基本的CRUD功能,还内置了丰富的插件功能.包括数据导出.书签.图表.数据添加向导 ...

  5. 简单的Django实现图片上传,并存储进MySQL数据库 案例——小白

    目标:通过网页上传一张图片到Django后台,后台接收并存储进数据库 真是不容易!!这个案例的代码网上太乱,不适合我,自己摸索着写,终于成功了,记录一下,仅供自己参考,有的解释可能不对,自己明白就好, ...

  6. springboot整合ueditor实现图片上传和文件上传功能

    springboot整合ueditor实现图片上传和文件上传功能 写在前面: 在阅读本篇之前,请先按照我的这篇随笔完成对ueditor的前期配置工作: springboot+layui 整合百度富文本 ...

  7. 百度ueditor的图片上传,前后端交互使用

    百度ueditor的使用 一个文本编辑器,看了网上很多文档写的很乱,这里拾人牙慧,整理下怎么使用. 这个东西如果不涉及到图片附件上传,其实很简单,就是几个前端文件,直接引用,然后配置下ueditor. ...

  8. jsp+springmvc实现文件上传、图片上传和及时预览图片

    1.多文件上传:http://blog.csdn.net/a1314517love/article/details/24183273 2.单文件上传的简单示例:http://blog.csdn.net ...

  9. laravel框架图片上传

    1.建控制器方法 2.建立路由 绑定控制器方法 3.进行图片上传的配置 修改图片上传的路径 a) config/filesystems.php 修改disks->local->root(图 ...

随机推荐

  1. Spark 2.2 DataFrame的一些算子操作

    Spark Session中的DataFrame类似于一张关系型数据表.在关系型数据库中对单表或进行的查询操作,在DataFrame中都可以通过调用其API接口来实现. 可以参考,Scala提供的Da ...

  2. php about session store db or cache

    PHP关于Session的配置: 在php.ini中配置为:session.name = PHPSESSID 在请求开始的时候,会话名称会被重置并存储到session.name配置项. 所以要想在不改 ...

  3. Spring第五弹—–配置Spring管理的bean的作用域和生命周期

    singleton (默认方式) 在每个Spring IoC容器中一个bean定义只有一个对象实例.默认情况下会在容器启动时初始化bean,但我们可以指定bean节点的lazy-init=“true” ...

  4. selenium 模块

    介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如 ...

  5. oracle连接池问题

    1.数据来源. 控制台地址:172.30.252.164:7001/console 登陆: weblogic/weblogic#123数据库jdbc:oracle:thin:@172.30.252.1 ...

  6. ZJOI 2009 假期的宿舍 最大匹配

    主要是main()中的处理,接下来就是二分匹配的模板题了 #include<cstdio> #include<cstring> #define maxn 110 using n ...

  7. 2017浙江省赛 C - What Kind of Friends Are You? ZOJ - 3960

    地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3960 题目: Japari Park is a large zoo ...

  8. 2018秦皇岛ccpc-camp Steins;Gate (原根+FFT)

    因为给定的模数P保证是素数,所以P一定有原根. 根据原根的性质,若\(g\)是\(P\)的原根,则\(g^k\)能够生成\([1,P-1]\)中所有的数,这样的k一共有P-2个. 则\(a_i*a_j ...

  9. TOSCA自动化测试工具--识别元素唯一性的控件

    当Modules模块通过Scan识别出页面元素后,选择需要测试的对象,然后判断对象唯一性

  10. eclipse上的.properties文件中文编辑显示处理

    最近在对接银联备份金,将相应的SDK导入到eclipse后,打开.properties文件中文注释变成了如下样子,很不方便查阅参照: 平常开发我们希望看到的是如下样子,很直观能明确配置的参数代表的信息 ...