一、前提设置
1.配置上传文件的保存目录
新建举例:
本文是在静态文件夹目录下建立了一个叫media的文件夹储存上传的图片文件,如图:

2.配置上传文件的路径
在setting.py文件中添加上传图片文件的路径:
MEDIA_ROOT = os.path.join(BASE_DIR,"static/media")
如图:

二、后台管理页面上传图片
- 设计模型类,在数据库中记录上传文件的操作
class PicTest(models.Model):
"""创建上传文件的数据库文件"""
gpic = models.ImageField(upload_to="booktest") # 设置文件的上传目录
def __str__(self):
"""返回名字"""
return self.gpic
class Meta:
db_table = "pictest"
注: upload_to后面跟的路径是除去setting.py文件中设置的文件路径后的路径。
迁移生成表:
1)python manage.py makemigrations
2)python manage.py migrate
3) 查看表的结构:desc pictest

4) 在admin.py中注册模型类:
# 注册上传图片模型类
admin.site.register(PicTest)
- 登录后台管理页面查看:


添加查看效果:


三、用户自定义页面上传图片
- 定义用户上传图片的页面并显示,是一个自定义表单
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>自定义图片上传</title>
</head>
<body>
上传文件时必须是post上传,编码方式:enctype必须是:multipart/form-data这个类型<br/>
<br/>
<form method="post" enctype="multipart/form-data" action="/uploal_action/" >
{# 取消csrf_token的防护#}
{% csrf_token %}
<input type="file" name="pic"><br/>
<input type="submit" value="上传"><br/>
</form>
</body>
</html>
- 定义接收上传文件的视图函数。
request对象有一个FILES的属性,类似于字典通过request.FILE可以获取上传的处理对象
["django.core.files.uploadhandler.MemoryFileUploadHandler", "django.core.files.uploadhandler.TemporaryFileUploadHandler"]
MemoryFileUploadHandler和TemporaryFileUploadHandler定义了Django的默认文件上传行为:将小文件读取到内存中,大文件放置在磁盘中。(小文件:小于2.5M,超过2.5M的视为大文件).
-
获取上传文件类的对象:
a = request.FILES[‘name’]
这个类的对象有一个方法为:a.name:获取文件的名字
还有一个a.chunks():每次返回这个文件的一块内容。
更多方法请看参考资料 -
编写视图中的代码:(views.py)
# /uploal_action/
def uploal_action(request):
"""保存上传文件"""
# 1.获取上传的文件
pic = request.FILES['pic']
# 2.创建文件
save_path = '%s/booktest/%s'%(settings.MEDIA_ROOT,pic.name)
with open(save_path, 'wb') as f :
# 获取上传文件的内容并写到创建文件中
# pic.chunks():分块的返回文件
for content in pic.chunks():
f.write(content)
# 3.将保存操作写到数据库中
PicTest.objects.create(gpic='booktest/%s'%pic.name)
# 4.返回响应
return HttpResponse('ok')
- 配置路由文件:(urls.py)
路由文件中添加如下:
path('update_pic/',views.update_pic), # 上传图片
path('uploal_action/',views.uploal_action), # 保存上传文件
- 效果显示;


上传返回响应:

本文详细介绍了在Django中进行图片上传的步骤,包括前提设置、后台管理页面上传图片和用户自定义页面上传图片的实现,同时讲解了Django处理文件上传的机制。

457

被折叠的 条评论
为什么被折叠?



