django上传文件

本文介绍了在Django项目中如何实现文件上传。通过前端form表单以multipart/form-data方式提交,后台通过request.FILES获取文件,然后可以将文件保存到本地或阿里云服务器,数据库仅存储文件地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在实际项目开发中经常用到上传文件之类的需求,最常用的方法就是通过form表单进行上传。后台通过request.FILES获取,下面分点描述如何通过表单进行上传文件。

一、前端代码。

 <form action="/https/blog.csdn.net/modify" method="post" enctype="multipart/form-data" >
{% csrf_token %}
    <div class="img-btn" onclick="$(this).next().click();">编辑头像</div>
    <input type="file" name="img" id="img" style="display: none;" onclick="changeHead(0);">
    <input type="submit" value="保存">
</form>

其中, enctype="multipart/form-data"这句话必须要加,你也可以为你的界面添加一些js样式。如果不想通过form自动提交的方式,可以通过ajax构造数据也是可以的。大致格式:(需要关闭type='submit',并修改为'button'添加点击事件)

var form_data = new FormData();
form_data.append('logo', $('#img')[0].files[0]);
form_data.append('csrfmiddlewaretoken', '{
  
  { csrf_token }}');
$.ajax({
    url:'/XXX',
    type:'post',
    data:form_data,
    processData: false,// 告诉jQuery不要去处理发送的数据, 发送对象。
    contentType
Django是一个流行的高级Python Web框架,它内置了处理文件上传的强大功能。在Django中,你可以通过以下几个步骤来处理文件上传: 1. **设置模型**: 首先,在Django模型中添加一个FileField或ImageField,这取决于你要存储的是普通的文件还是图片等媒体文件。 ```python from django.db import models class FileUploadModel(models.Model): file = models.FileField(upload_to='uploads/') # 或者如果是图片,可以使用ImageField image = models.ImageField(upload_to='images/') ``` 2. **创建视图**: 在视图函数中,接收POST请求并使用`request.FILES`来获取上传文件。例如,可以使用`form.save()`将文件保存到数据库。 ```python def upload_file(request): if request.method == 'POST': form = MyForm(request.POST, request.FILES) if form.is_valid(): form.save() return redirect('success_url') else: form = MyForm() return render(request, 'upload_form.html', {'form': form}) ``` 3. **模板和表单**: 在HTML模板中创建表单供用户上传文件,使用`form.as_p`来显示表单字段。例如,可以使用`<input type="file">`。 ```html <form method="post" enctype="multipart/form-data"> {% csrf_token %} {{ form.as_p }} <button type="submit">Upload</button> </form> ``` 4. **目录结构**: 确保在项目的`settings.py`中设置了正确的`MEDIA_ROOT`和`MEDIA_URL`,它们指定了文件存储的位置及访问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、付费专栏及课程。

余额充值