项目整体目录结构
目录结构.png
- 在settings中配置STATICFILES_DIRS
STATIC_URL = '/static/'
# 设置静态文件存放的物理目录
STATICFILES_DIRS=[os.path.join(BASE_DIR,'static')]
2.在settings中配置MEDIA_ROOT
# 设置文件上传路径
MEDIA_ROOT = os.path.join(BASE_DIR,'static/media')
3.在TEMPLATES中创建上传文件页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>上传文件</title>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="/upload">
{% csrf_token %}
<input type="file" name="myFile"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
注意:form标签的属性中添加 enctype="multipart/form-data" ,否则后台获取file为空
4.在url中配置处理函数的路径
from django.conf.urls import url
from django.contrib import admin
from django.urls import path
from bookstore import views
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^show',views.show),
url(r'^upload',views.upload_handle)
]
5.在views中处理上传逻辑:
from django.conf import settings
from django.http import HttpResponse
from django.shortcuts import render,redirect
def show(request):
if request.method =="GET":
return render(request,'upload.html')
def upload_handle(request):
"""
处理上传图片
:param request:
:return:
"""
# 1.获取上传的文件
file = request.FILES.get('myFile')
# 创建一个文件
save_path = '%s/%s'%(settings.MEDIA_ROOT,file.name)
# 2.获取上传文件内容并写入到创建的文件中
with open(save_path,'wb') as f:
for content in file.chunks():
f.write(content)
# 写入到数据库保存上传记录
# 返回
return HttpResponse("上传成功")
测试效果 http://127.0.0.1:8000/show
测试上传页面.png
文件上传成功.png
返回页.png