Django如何上传图片并对上传图片进行访问
2024-09-23 23:56:07
通过一个示例的完整演示过程,来学习django如何上传图片,以及对于media文件夹中的上传图片进行请求:
1.配置settings.py
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media').replace('\\','/') #用于存储和访问上传图片的根目录
2.配置urls.py
2.1 根级
from django.conf.urls import include, url
from django.contrib import admin
from django.conf import settings
from django.views.static import serve urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^',include('user.urls')),
url(r'media/(?P<path>.*)',serve,{'document_root':settings.MEDIA_ROOT}), #访问上传图片时需要配置
] 3.定义models.py
from django.db import models class Goods(models.Model):
name = models.CharField(max_length=20)
img = models.ImageField(upload_to='goods/',default='goods/default.jpg',null=True,blank=True)
# upload_to这个属性必须得有,后面是基于MEDIA_ROOT的相对路径,上传文件时,django会自动帮我们创建这一系列文件夹并存储文件 4.定义views.py
# 上传图片页
def upload_pic(request):
return render(request,'user/upload_pic.html') # 对上传图片进行处理
def handle_pic(request):
if request.method == 'POST':
goods_name = request.POST.get('goods_name')
pic_obj = request.FILES.get('picture') # 得到的是一个图片对象 # 数据库中存储的是路径,并非图片本身
goods = Goods()
goods.name = goods_name
goods.img = pic_obj
goods.save()
return redirect('/show_pic/')
else:
return HttpResponse('上传图片失败')
# 对上传图片进行显示
def show_pic(request):
# 获取商品名goods001所对应的图片路径
goods1 = Goods.objects.get(name='goods001')
img = goods1.img
context = {'img':img}
return render(request,'user/show_pic.html',context)
5.定义上传页模板upload_pic.html以及上传页页面显示
5.1 upload_pic.html:
# 表单中有提交文件的控件时,提交方式必须是post,并且需要设置enctype属性
5.2 上传页页面显示:
6.上传文件后图片存储路径
# media文件夹及其内部的文件夹和文件,均由django自动帮我们生成
7.上传文件后数据库中的存储内容
# 存储的是图片相对于media文件夹的相对路径,即models.py中定义的upload_to="goods/"+图片文件名
8.访问media中上传过的图片 8.1 show_pic.html:
# 同静态文件/static/访问一样,/media/后面直接写上media文件夹下的文件名,就可以直接请求到上传图片资源
8.2 页面显示
在地址栏直接对media中的图片进行访问效果一样,如下:(通常我们不会以这种方式直接请求)
最新文章
- Asp.Net WebApi核心对象解析(上篇)
- hdu1150 匈牙利
- WPF--调用线程必须为 STA,因为许多 UI 组件都需要(转载)
- eclipse 怎么新建工作空间workspace
- HashMap解决hash冲突的方法
- 潜语义分析(Latent Semantic Analysis)
- 大型Web应用运行时 PHP负载均衡指南
- Mysql命令-求一列字段的总和
- 苹果新的编程语言 Swift 语言进阶(二)--基本数据类型
- 流畅的Python读书笔记(二)
- cerebro 配置
- 第 8 章 容器网络 - 053 - overlay 是如何隔离的?
- RMQ_ST表
- Spring MVC国际化
- 【Java并发编程】之十:使用wait/notify/notifyAll实现线程间通信的几点重要说明
- Remon Spekreijse CSerialPort用法
- 利用js_API 执行对html文档元素的属性的CRUD操作
- 终端运行apk
- JAVA工具类 UUID
- 【CCPC-Wannafly Winter Camp Day4 (Div1) F】小小马(分类讨论)
热门文章
- 黑马程序员_毕向东_Java基础视频教程——赋值(随笔)
- 黑马程序员_毕向东_Java基础视频教程——进制转换之负数二进制(随笔)
- 我的第一篇博客-学习书写markdown
- Office 2016 英文版(VOL版)下载
- 【雕爷学编程】Arduino动手做(42)---PM2.5粉尘传感器
- MySQL zip解压 安装过程和配置
- 13.2 Go练习题答案
- 06.drf(django)的权限
- python3.x 基础四:目录获取及目录规范
- 201771010128王玉兰《面向对象程序设计(Java)》第十三周学习总结