django 利用Form上传文件到 media 文件夹

背景:利用 Form 收集用户提交的信息,包括字符串和文件对象,文件保存在项目的 media 文件夹,因为 static 文件一般是用来存静态文件 css 或者项目所需要的图片,用户上传的文件应该保存在其他文件夹;

1、 启用 media,在项目根目录创建 media 文件夹(与manage.py文件同级)

urls.py 需要新增如下

...
from django.urls import re_path
from django.views.static import serve
from django.conf import settings
urlpatterns = [
    re_path(r'^media/(?P<path>.*)$',serve,{'document_root':settings.MEDIA_ROOT},name='media'),
...

]

settings.py 需要新增如下

MEDIA_ROOT = os.path.join(BASE_DIR,"media")
MEDIA_URL = "/media/"

2、设置好之后在 media 文件夹下放一个图片就能够直接访问了

3、 案例:

用户上传自己的姓名、年龄、头像

 上传成功之后:查看数据库

 4、案例实现

4.1、models.py 创建一张表

class Boss(models.Model):
    name = models.CharField(verbose_name="姓名",max_length=32)
    age = models.IntegerField(verbose_name="年龄")
    img = models.CharField(verbose_name="头像&#
Django 中,上传文件夹需要进行以下步骤: 1. 定义一个文件上传表单 在 HTML 表单中添加 enctype="multipart/form-data" 属性,以便支持文件上传。 ```html <form method="post" enctype="multipart/form-data"> {% csrf_token %} <input type="file" name="myfolder" webkitdirectory directory multiple> <button type="submit">上传</button> </form> ``` 注意:需要将 input 标签的属性设置为 webkitdirectory directory multiple,以支持上传文件夹。 2. 在视图函数中处理文件上传 在视图函数中获取上传文件夹,并将其保存到项目文件夹下。可以使用 Python 的 os 模块来处理文件夹的创建和文件的复制。 ```python import os def upload(request): if request.method == 'POST' and request.FILES['myfolder']: myfolder = request.FILES['myfolder'] folder_path = os.path.join('media', myfolder.name) os.makedirs(folder_path, exist_ok=True) for file in myfolder: file_path = os.path.join(folder_path, file.name) with open(file_path, 'wb+') as destination: for chunk in file.chunks(): destination.write(chunk) return render(request, 'upload.html') return render(request, 'upload.html') ``` 3. 显示上传后的文件夹上传文件夹成功后,可以将其显示给用户。可以在模板中使用上传文件夹的路径。 ```html {% if folder_path %} <p>上传成功!</p> <p>文件夹位置: {{ folder_path }}</p> {% endif %} ``` 注意:需要在 settings.py 文件中设置 MEDIA_ROOT 和 MEDIA_URL,以便访问上传文件夹。 ```python MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/' ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值