上传图片实际上是 把图片存在服务器的硬盘中,将图片存储的路径存在数据库中。

1 首先要配置文件上传的路径:


1.1 建立静态文件目录

  在项目根目录下 新建一个 static文件夹,下面再建立一个media文件夹,在media中建立一个与应用名相同的文件夹

  static为静态文件目录,里面是各个引用的静态文件,包括js css  图片 等等

  static下一般分为 js  css media 等

  js css 和media 下一般都根据应用去建立多个文件夹,不同应用去自己的文件夹中找

我的目录是这样的:

我的应用模块是booktest

上传的图片都会保存到 static/media/booktest/中

1.2 配置静态路径

  到项目下的settings.py文件中,配置静态文件路径

  添加如下3个语句

 # Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/ STATIC_URL = '/myStatic/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static'),
]
MEDIA_ROOT=os.path.join(BASE_DIR,'static/media')

BASE_DIR代表整个项目的根目录

STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static'), ]  代表指定根目录下的static目录是静态文件目录

MEDIA_ROOT=os.path.join(BASE_DIR,'static/media') 代表上传文件的目录是static/media

STATIC_URL = '/myStatic/' 代表 我们在编程的时候,用到静态路径的时候 用/myStatic/ 来找到静态文件的目录

2 建立一个数据库,用于存储上传的图片存在服务器的哪个路径下

在模型中建立图片的模型类并迁移

#上传图片的模型类
class Pictures(models.Model):
pic = models.ImageField(upload_to='booktest/')
def __str__(self):
return self.pic

迁移命令:

生成迁移文件: python manage.py makemigrations

执行迁移: python manage.py migrate

图片的上传:

1 用户上传图片:
1 前端的form表单input上传:

前端模板代码:

 <body>
<form action="/upload/" method="post" enctype="multipart/form-data" >
{% csrf_token %}
上传:
<input type="file" name="picture">
<input type="submit" value="上传"> </form> </body>

2 url映射部分 省略......

3 视图view的代码:

 # 上传图片
from django.conf import settings
from .models import Pictures
# 返回上传图片的页面
def getUpload(request):
return render(request,'booktest/upload.html') # 发来表单 实现上传功能
def upload(request):
# 从请求当中 获取文件对象
f1 = request.FILES.get('picture')
# 利用模型类 将图片要存放的路径存到数据库中
p = Pictures()
p.pic = "booktest/" + f1.name
p.save()
# 在之前配好的静态文件目录static/media/booktest 下 新建一个空文件
# 然后我们循环把上传的图片写入到新建文件当中
fname = settings.MEDIA_ROOT + "/booktest/" + f1.name
with open(fname,'wb') as pic:
for c in f1.chunks():
pic.write(c)
return HttpResponse("上传成功")

这个时候我们在前段上传提交后,

在静态文件夹下多了一个图片文件

数据库中插入了一条信息,存储图片存放路径。

2 管理页面上传图片

在前台申请 127.0.0.1:8000/admin登陆后 上传图片

1 首先在admin.py中注册一下上传图片的模型类

 from django.contrib import admin
from .models import Pictures
# Register your models here.
admin.site.register(Pictures)

2 登陆 xxxx:8000/admin/  登陆后 看到我们的数据库表,点开直接上传就可以。

上传之后我们就能发现 数据库多了一条数据,本地静态文件路径也多了一个图片。

创建管理账户的命令: python manage.py createsuperuser

图片的显示:


原理是从数据库中取到路径,然后再去路径找文件,返回给前台模板

views视图中的代码:

 # 显示图片
def show_pic(request):
pic_obj = Pictures.objects.get(id=1)
return render(request,'booktest/show_pic.html',{'pic_obj':pic_obj})

pic利用模型类取到id为1的图片对象,把这个图片对象送给模板

模板中代码:

 <body>
<h1>显示图片</h1> <img src="/myStatic/media/{{ pic_obj.pic }}" alt="">
</body>

pic_obj.pic: 之前建立了模型类有一个pic属性 是 ImageField类型,upload_to 指定了上传文件的目录

这里利用这个对象

django自动帮我们去静态路径下取到图片对象 放到前台。

django中图片的上传和显示的更多相关文章

  1. Django中图片的上传并显示

    一.settings配置文件中配置 MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'medias').replace('\\', ...

  2. MVC 4 图片的上传及显示

    1 首先我们看一下如何上传 1.1 view 上传页面: 1: @using (Html.BeginForm("Create", "Achievement", ...

  3. Django_图片的上传下载显示配置

    图片上传的配置 image = models.ImageField(upload_to='org/%Y/%m',...) upload_to默认是上传到项目的'MEDIA_ROOT/org/%Y/%m ...

  4. Django中的文件上传和原生Ajax

    概述 Django中的上传有3种方案: form 表单常规上传,但点击提交后会自动刷新页面 Ajax 上传,不刷新页面,(分为原生ajax上传和jQuery上传),IE7以上不兼容 iframe 上传 ...

  5. django中处理文件上传文件

    1 template模版文件uploadfile.html 特别注意的是,只有当request方法是POST,且发送request的<form>有属性enctype="multi ...

  6. django后台处理前端上传和显示图片

      1:项目根目录存放图片的目录 2:settings.py  添加 MEDIA_ROOT = os.path.join(BASE_DIR, "media") 3:url.py 添 ...

  7. 航空售票系统设计分析(Markdownpad2图片服务器上传无法显示)

    一.体系结构设计 1.系统原型图 2.体系结构环境图 3.构建结构图 二.人机交互界面设计 1.用户分析结果及建议 本次分析的主要目标关注用户评论反馈,对反馈进行归纳,设计出用户喜欢的界面样式.用户的 ...

  8. ruby on rails爬坑(三):图片上传及显示

    一,问题及思路 最近在用rails + react + mysql基本框架写一个cms + client的项目,里面涉及到了图片的上传及显示,下面简单说说思路,至于这个项目的配置部署,应该会在寒假结束 ...

  9. antd pro table中的文件上传

    概述 示例代码 列表页面 form 页面 model.js service.js 总结 概述 项目中经常会遇到在表格中展示图片的需求(比如展示用户信息时, 有一列是用户的头像). antd pro t ...

随机推荐

  1. IntelliJ IDEA 源值1.5已过时,将在未来所有版本中删除

    1. 修改Maven的Settings.xml文件添加如下内容 <profile> <id>jdk-1.8</id> <activation> < ...

  2. wpf动态增加删除控件

    我在xaml中定义了一个名字为morepictureWrapPan为WrapPanel,然后将控件添加在此WrapPanel中.由于要实现控件的删除功能,所以增加的textbox和button的名字都 ...

  3. Mac环境下使用VSCode搭建Go开发环境

    换新工作啦!!!开心一下.到了新公司一看,乖乖,全MAC办公,让我这只用过windows的土包子怎么活,而且公司的人都好高冷,于是自己摸索着搭建go语言开发环境了. go语言的ide挺多的,JetBr ...

  4. 使用git指令下载github仓库代码(笔记)

    通过Git指令下载源码 Git概念说明 ​ 三种状态:修改状态.暂存状态和Git仓库 ​ 基本的Git工作流程: ​ 在工作目录中修改文件 ​ 暂存文件,将文件的快照放入暂存区域 ​ 提交更新,找到暂 ...

  5. 听说你买了 EOS ,连代码什么样都不知道?

    最近发现很多人投资了 EOS,却并不关心 EOS 目前的开发进度和技术细节,如果你投资了 EOS, 还有一定的技术基础,那就更应该关心 EOS 的开发情况了,下面我们就从 EOS 的源代码说起:   ...

  6. Idea中开启assert断言

    先打开相应的配置面板,有以下两种方式.   然后在VM栏里输入 -enableassertions 或者 -ea 就好了 然后编写程序试试 我的目录结构如下:(因为Main class那里要写类的全限 ...

  7. protobuf(quickStart)

    1.简介 Protocol Buffers是Google开发一种数据描述语言,能够将数据进行序列化,可用于数据存储.通信协议等方面. 可以理解成更快.更简单.更小的JSON或者XML,区别在于Prot ...

  8. 【Linux】积累笔记

    ■ 关于查看系统的一些版本信息 查看系统的发行版本可以用 cat /etc/issue 或者 cat /etc/redhat-release (Centos上) 查看系统的内核版本以及系统位数 una ...

  9. 动态规划(Dynamic programming) 走楼梯

    来自:算法爱好者 有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶,要求用程序来求出一共有多少种走法? f(10) = f(9) + f(8) f(9) = f(8) + f ...

  10. JQuery :contains选择器,可做搜索功能,搜索包含关键字的dom

    假设有一个加油站列表,找到所有包含某某关键字的加油站. 选择所有包含 "is" 的 <p> 元素: $("p:contains(is)") 搜索功能 ...