刨析django----文件上传

场景

在客户端本地,将一些图片、文件等上传至服务端
如:

  1. 个人头像
  2. 文档等

前端部分

上传文件

在这里插入图片描述

请求媒体资源

<img src="/media/images/head.png" alt="未加载图片" width="200px">

<!--直接请求媒体资源,不走视图-->

后端

用户上传的资源-----统称为media资源

配置

  1. settings.py
MEDIA_URL = "/media/"  #以‘/media/’开头的请求,为媒体资源的请求
MEDIA_ROOT = os.path.join(BASE_DIR,"media")
#别忘记创建media目录            
  1. 主路由urls.py
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
	xxx,
]
urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

视图接收上传的文件

路由:/test/upload1/
视图:
方案1.
上传的文件字节流—>写入服务端文件

from django.conf import settings
def receive_view(request):
	#获取文件对象
	file = request.FILES.get("upload")
	#file.name,上传的文件名
	#file.file,内容字节流
	
	#服务端的文件路径
	s_filename = os.path.join(settings.MEDIA_ROOT,file.name)
	with open(s_filename,"wb") as f:
		data = file.file.read() #读取字节流数据
		f.write(data)	
	
	data = {"data":"上传成功"}
	return render(request,"upload.html",data)

路由:/test/upload2/
方案2.
直接上传到服务端的模型类(表)中

#models.py
from django.db import models
class FileUpload(models.Model):
	desc = models.CharField("文件描述",max_length=100)
	file_ = models.FileField(upload_to="images") #/media/images 子目录
	#新版本中不支持字段以下划线结尾
	def __str__(self):
		return self.desc
	class Meta:
		db_table = "upload_table"
		verbose_name = "上传文件" #默认复数形式
		verbose_name_plural = verbose_name #单数形式
#模型类  --必须定义在  其他应用中,不能再主应用中
from media_app.models import FileUpload
def receive_view(request):
	desc = request.POST.get("desc")
	file_ = request.FILES.get("upload")
	FileUpload.objects.create(desc=desc,file_=file_)#直接给文件对象

服务端进入media_table查看
在这里插入图片描述

实战代码

项目代码
提取码:pf44

在局域网内部署服务

#runserver 仅仅开发测试
python3 manage.py runserver ip1:8000

#配置文件
ALLOWED_HOST = [ip1]

#在 windows 浏览器访问
http://ip1:8000/test/upload1/
http://ip1:8000/test/upload2/
http://ip1:8000/test/media/

 
 
 
 
上一篇:刨析django----内建用户系统2     下一篇:刨析django----发送邮件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laufing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值