图片上传首先要是设置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. J.U.C Atomic(一)CAS原理

    CAS概念 CAS:Compare And Swap,比较并交换.java.util.concurrent包完全是建立于CAS机制之上的. CAS原理 Java CAS是通过调用Unsafe的nati ...

  2. android 带RadioButton的Dialog

    package com.example.dialog3; import android.os.Bundle;import android.app.Activity;import android.app ...

  3. idea 取消控制台的行数限制

    有时候我们要输出大量的信息放到控制台显示,但是多了之后就出现最上面的信息被覆盖删除, 因此就需要设置控制台的显示行数,但在idea7之后的版本中,取消了对控制台行数设置选项, 只能通过更改配置文件进行 ...

  4. Shiro安全框架入门篇

    一.Shiro框架介绍 Apache Shiro是Java的一个安全框架,旨在简化身份验证和授权.Shiro在JavaSE和JavaEE项目中都可以使用.它主要用来处理身份认证,授权,企业会话管理和加 ...

  5. Centos 6.5 Install Mysql 8.0.0

    依赖包 yum install numactl libaio perl-Time-HiRes per-devel -y 下载对应系统版本下载 wget http://cdn.mysql.com//Do ...

  6. Hexo博客部署codingNet静态资源无法加载

    用Hexo搭建的个人博客,部署到github的pages的话,好像百度搜索不到.所以在国内的codingNet的pages服务也一起部署一下,这样方便国内国外搜索引擎收录进来.具体部署教程我是参考这里 ...

  7. iOS 开发,混合使用 ARC 和非ARC

    [前提知识] ARC:Automatic Reference Counting,自动引用计数 在开发 iOS 3 以及之前的版本的项目时我们要自己负责使用引用计数来管理内存,比如要手动 retain. ...

  8. Object-c 开发之property

    @property 关键字:atomic,nonatomic,readonly,readwrite,assign,retain,copy,getter,setter,strong 默认行为(atomi ...

  9. Python Date 1–Hello world print

    对比学习Python与C str1 = 'hello python 2'# 字符串i = 3.1415926535 print(str1)print("hello python\n" ...

  10. 关于Task的认识

    首先来说说 Task.Factory.StartNew这种方式来创建Task,这里的WaitAll()指的是等待所有Task执行完成,并且里面的Task参数(t1,t2)是异步的,先以匿名委托方式 s ...