Django中文件的上传

项目整体目录结构


目录结构.png
  1. 在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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 项目部署到阿里云(nginx+uwsgi)上后,静态文件加载没有问题。但是在本地,使用开发服务器,却始终加载不成功...
    兰山小亭阅读 5,656评论 0 9
  • Django 准备 “虚拟环境为什么需要虚拟环境:到目前位置,我们所有的第三方包安装都是直接通过 pip inst...
    33jubi阅读 1,342评论 0 5
  • 模板标签除了几个常用的,还真心没有仔细了解一下,看到2.0发布后,翻译学习一下。 本文尽量忠实原著,毕竟大神的东西...
    海明_fd17阅读 2,034评论 0 5
  • 处理静态文件,尤其是在开发时,是一件很头疼的事情。在这篇文章中,我们将会讨论一些设置,目录结构和他们之间的相互影响...
    51reboot阅读 1,703评论 0 1
  • 前端相关 展示内容:浏览器接收后端返回的html文本(经过模板渲染)内容并在页面展示.与用户交互信息:js将用户产...
    Knight方阅读 2,860评论 0 1