图片上传首先要是设置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. JS中将字符串中每个单词的首字母大写化

    今天看到一个帖子,处理js中字符串每个单词的首字母大写. 原贴地址:关于字符串中每个单词的首字母大写化问题 受到启发,自己跟着改写了几个版本如下,请大家指正. 1.for循环: var a = 'Hi ...

  2. Springboot+shiro配置笔记+错误小结

    软件152 尹以操 springboot不像springmvc,它没有xml配置文件,那该如何配置shiro呢,其实也不难,用java代码+注解来解决这个问题.仅以此篇记录我对shiro的学习,如有对 ...

  3. String,StringBuffer和StringBuilder的区别

    面试的时候经常问到的一个题:这里先说明下三者在JVM中的执行速度:StringBuilder > StringBuffer > String,原因且看下面慢慢阐述. 首先看一个概念,为啥一 ...

  4. 控制台应用程序中添加对MFC的支持

    在windows控制台应用程序中,肯能会想使用一些MFC中的类,如CStringArray等,通过下面两步简单的设置可以添加对MFC的支持: 1.右击工程名 -> References 选择 A ...

  5. POJ 3253 Fence Repair(简单哈弗曼树_水过)

    题目大意:原题链接 锯木板,锯木板的长度就是花费.比如你要锯成长度为8 5 8的木板,最简单的方式是把21的木板割成13,8,花费21,再把13割成5,8,花费13,共计34,当然也可以先割成16,5 ...

  6. ABP官方文档翻译 1.5 多租户

    多租户 什么是多租户? 数据库和部署架构 多部署-多数据库 单部署-多数据库 单部署-单数据库 单部署-混合数据库 多部署-单/多/混合数据库 ABP的多租户 启用多租户 租主和租户 会话 决定当前租 ...

  7. JS类、对象、方法、prototype、_proto_

    案例代码: function People(name) { //对象属性 this.name = name; //对象方法 this.Introduce = function() { alert(&q ...

  8. 20145314郑凯杰《信息安全系统设计基础》第9周学习总结 PART B

    20145314郑凯杰<信息安全系统设计基础>第9周学习总结 PART B 明确教材学习目标 注意每个系统调用的参数.返回值,会查帮助文档 阅读教材,完成课后练习(书中有参考答案),考核: ...

  9. The Startup Manager FAQ

    Main Features: 1.  Login Items: Manageable list of applications that are launched automatically ever ...

  10. PHP中的_FILE_和_DIR_的区别

    <?php$dir = dirname(__FILE__);?>在PHP5.3中,增加了一个新的常量__DIR__,指向当前执行的PHP脚本所在的目录.例如当前执行的PHP文件为 /www ...