Django 图片上传、存储与显示
参考博客:http://www.cognize.me/2016/05/09/djangopic
开始之前要先安装python图像处理库:
pip install --use-wheel Pillow
一、数据库设置
1. 先创建一个app,比如叫img_db。
命令行:python manage.py startapp img_db
2. 将其加入到settings.py文件中的INSTALLED_APPS中
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'img_db',
'corsheaders',
]
3. 在models.py中创建表,图片存储使用的是 models.ImageField
例如:
class IMG(models.Model):
img = models.ImageField(upload_to='img')
name = models.CharField(max_length=20)
这里的upload_to是指定图片存储的文件夹名称,上传文件之后会自动创建
4. 更新数据库
python manage.py makemigrations
python manage.py migrate
二、修改配置文件setting.py
只需要在最后的静态文件区加上下面两行代码:
MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\', '/') #设置静态文件路径为主目录下的media文件夹
MEDIA_URL = '/media/' #url映射
三、创建模板
1. 在APP目录下创建文件夹templates
注意:这是django默认的形式,如果想把模板放在其他路径,得自己重新配置。
2. 在templates文件夹下创建文件夹,比如叫img_tem
3. 在img_tem下创建模板
uploadimg.html
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="img">
<button type="submit">上传</button>
</form>
showimg.html
{% for img in imgs %}
<img src="{{ img.img.url }}" />
{% endfor %}
这里img是Django的Model里的一个实例对象,使用img.img.url可以获取他的url,而且在settings.py中已经对其做了静态映射
四、创建视图函数 view.py
@csrf_exempt
def uploadImg(request):
if request.method == 'POST':
new_img = IMG(
img=request.FILES.get('img'),
name = request.FILES.get('img').name
)
new_img.save()
return render(request, 'img_tem/uploadimg.html')
首先用get方式访问uploadImg(),然后会跳转到uploadimg.html页面,上传文件时会使用post再次访问uploadImg(),这时就会将图片存储在数据库与media/img_tem中。
@csrf_exempt
def showImg(request):
imgs = IMG.objects.all()
content = {
'imgs':imgs,
}
for i in imgs:
print i.img.url
return render(request, 'img_tem/showimg.html', content
五、url.py配置
from django.conf.urls import url
from django.contrib import admin
import view
from django.conf.urls.static import static
from django.conf import settings urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^upload', view.uploadImg),
url(r'^show', view.showImg),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 这句话是用来指定和映射静态文件的路径
完成之后就可以发布了。
Django 图片上传、存储与显示的更多相关文章
- django 图片上传与显示
由于图片上传的需要,学习了一波上传 1. 上传 前端代码 <form action="写上相应的定向位置" method="post" enctype=& ...
- 配置django图片上传与保存展示
近来在研究django,发现有好多好玩的功能,比如图片上传,以前处理这个比较麻烦,现在我们来看看如何来处理图片上传与保存 1.在数据库设计的时候需要配置upload_to image = models ...
- php图片上传存储源码,可实现预览
<?php header("content-Type: text/html; charset=gb2312"); $uptypes=array('image/jpg', // ...
- Django 图片上传到数据库 并调用显示
环境:Django2.0 Python3.6.4 建立项目,数据库设置,就不说了. 直接上代码: 在models.py中,需要建立模型,这里使用了ImageField字段,用来存储图片路径,这个字段继 ...
- django 网站上传资源的显示与配置
1. 上传资源的配置 1. 首先在项目里创建一个名称叫media的文件夹专门保存用户上传 2. settings.py文件配置上传资源的路径 # 上传资源路径,如果图片,上传文件等 MEDIA_UR ...
- springmvc的图片上传与导出显示
1.前端文件上传需要在form表单内添加enctype="multipart/form-data" ,以二进制传递: 2.web.xml文件内配置 <servlet-mapp ...
- django 图片上传 前段+后端
1.前台<form method="post" action="./writerApply" enctype="multipart/form-d ...
- django图片上传修改图片名称
storage.py # 给上传的图片重命名 from django.core.files.storage import FileSystemStorage from django.http impo ...
- 关于Django图片上传
首先要设置settings # 上传文件 MEDIA_ROOT = 'media' # 项目下的目录 MEDIA_URL = "/media/" # 跟STATIC_URL类似,指 ...
随机推荐
- 在mvc视图中实现rdlc报表展示
需求:在view视图页面中嵌入rdlc报表,rdlc的xml为动态传入的xml字符串.本项目是基于abp框架 可能出现问题: 1.rdlc报表是由asp.net的服务器控件ReportViewer来支 ...
- jqgrid 获取选中行主键集合
如何获取选中行的主键集合呢? 使用 getGridParam(selarrrow) 方法可获取所有选中行的主键集合. 注意:此处的主键集合是指-设置为主键的列(key: true).再次提醒:一个j ...
- SelectObject函数
SelectObject 函数功能:该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的同样类型的对象. 函数原型:HGDIOBJ SelectObject(HDC hdc, HGDIOBJ ...
- Tomcat端口被占用解决方案
Tomcat端口被占用解决方法 1.在dos下,输入 netstat -ano|findstr 8080 //说明:查看占用8080端口的进程,显示占用端口的进程 2.taskkill /pid 19 ...
- 20155302《网络对抗》Exp8 Web基础
20155302<网络对抗>Exp8 Web基础 实验内容 (1).Web前端HTML(0.5分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个 ...
- Hadoop开发第2期---虚拟机中搭建Linux
注:关于如何将hadoop源码导入Eclipse详见http://pan.baidu.com/s/1hq8ArUs 一.Hadoop配置软件(我的电脑是Windows7旗舰--64bit) 1. VM ...
- 【转载】VS配置路径和宏
原文路径:http://blog.csdn.net/puttytree/article/details/7838419 在介绍项目配置之前,先说明两点 1. 项目配置中,最好不要使用相对路径,更不要使 ...
- JavaScript 变量提升
变量提升(Hoisting):在ES6之前,函数声明和变量声明总是被JavaScript解释器隐式地提升(hoist)到包含他们的作用域的最顶端. 注意: 1. JavaScript 仅提升声明,而不 ...
- [51Nod1238]最小公倍数之和 V3[杜教筛]
题意 给定 \(n\) ,求 \(\sum_{i=1}^n \sum_{j=1}^n lcm(i,j)\). \(n\leq 10^{10}\) 分析 推式子 \[\begin{aligned} an ...
- web网站的并发量级别
web网站的并发量级别 评价一个网站的“大小”,处于视角的不同,有很多种衡量的方法,类似文章数,页面数之类的数据非常明显,也没有什么可以争议的.但对于并发来说,争议非常之多,这里就从一个技术的角度开始 ...