Django之文件上传

2022-09-26 15:37:32 浏览数 (1)

文件上传的使用场景

  • 用户可以通过浏览器将图片等文件上传至网站
  • 用户上传头像、上传PDF、TXT等文件

上传规范 -前端HTML

文件上传必须以Post的方式进行提交,表单<form>中的文件上传时候必须带有enctype="multipart/form-data"时候 才会包含文件内容数据。

表单单重使用<input type="file" name="xxx">进行上传文件

上传规范 -后端

试图函数中,用request.FILES取文件框里的内容

代码语言:javascript复制
file=request.FILES['xxx']
  • FILES的key对应页面file框中的name的值
  • file绑定文件流对象
  • file.name 文件名
  • file.file文件的字节流数据

配置文件的访问路径和存储路径,在setting.py中设置MEDIA相关配置,Django把用户上传的 资源统称为media资源。

代码语言:javascript复制
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')

MEDIA_URLMEDIA_ROOT需要手动绑定

代码语言:javascript复制
# 在主路由当中
from django.contrib import admin
from django.urls import path,include
from index import views as index_views
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('user/',include('user.urls')),
    path('note/',include('note.urls')),
    path('index/',index_views.index_views)
]

urlpatterns  = static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

等价于做了MEDIA_URL开头的路由,Django接到请求MEDIA_URL后去MEDIA_ROOT查找资源

文件写入方案:借助ORM操作

字段:FileField(upload='子目录名')

代码语言:javascript复制
# 先创建一个模型类
from django.db import models
class Upload_info(models.Model):
    filename = models.CharField(verbose_name="文件名称",max_length=11)
    picture = models.FileField(upload_to='files')
代码语言:javascript复制
# 上传文件的视图函数
def upload_views(request):
    if request.method == 'GET':
        return render(request,'user/upload.html')

    elif request.method == 'POST':
        # 取上传文件的名字
        title = request.POST['title']
        up_file = request.FILES['file']

        Upload_info.objects.create(title=title,picture=up_file)


        return HttpResponse("文件上传成功")

0 人点赞