0


Django实现文件上传

文章目录


一、Django如何实现文件上传?

Django是python用于开发网站的一种常用框架,因此不可避免的会遇到文件及图片上传的相关问题,下面我来简单讲解通过POST表单上传文件的实现过程。

二、使用步骤

1.在setting.py中添加如下代码

代码如下(示例):

  1. MEDIA_URL ='/media/'
  2. MEDIA_ROOT = os.path.join(BASE_DIR,'media')

文件上传之后都会存储在该路径下,直接copy就好

2.models.py中新建包含FileField的model

代码如下(示例):

  1. import uuid
  2. import datetime
  3. from django.db import models
  4. def image_upload_to(instance, filename):#文件的时间戳
  5. #print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
  6. id = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S").replace('-','').replace(' ','').replace(':','')
  7. filename = filename.replace('.csv','_')+id+'.csv'#print(filename)return'file/+{filename}'.format(uuid=uuid.uuid4().hex, filename=filename)
  8. class Processlog(models.Model):'''日志单模型类'''
  9. file_name = models.FileField(upload_to=image_upload_to,null=False,blank=False)
  10. upload_time = models.DateTimeField(auto_now_add=True)
  11. download_time = models.DateTimeField(null=True,blank=True)
  12. username = models.ForeignKey(User, on_delete=models.CASCADE, to_field='username')

image_upload_to修改了文件上传之后的文件名(在文件末尾加上时间戳),以及上传的路径(file/)。
必须包含FileField的字段,该字段用于记录文件上传的位置,upload_to也可以直接指定,例如(upload_to=‘file/’)


3.urls.py中指定上传文件根目录

代码如下(示例):

  1. from django.conf.urls import url
  2. from processes import views
  3. from django.conf import settings
  4. from django.conf.urls.static import static
  5. urlpatterns = [
  6. url(r'^uploadFileSubmit$', views.uploadFileSubmit),
  7. ]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) #这是关键

4.在HTML文件中添加上传文件的控件

代码如下(示例):

  1. <form class="am-form am-form-horizontal" action="uploadFileSubmit" method="post" style="padding-top: 30px;" enctype="multipart/form-data">
  2. {% csrf_token %}{{form.as_p}}
  3. <input value="504" name="roleId" type="hidden">
  4. <div class="am-form-group">
  5. <label for="rep-no" class="am-u-sm-3 am-form-label">
  6. 文件
  7. </label>
  8. <div class="am-u-sm-9">
  9. <input id="file_name" required="" placeholder="" value="{{file_name}}" name="file_name" type="file">
  10. </div>
  11. </div>
  12. <div class="am-form-group">
  13. <div class="am-u-sm-9 am-u-sm-push-3">
  14. <button id="addRole" class="am-btn am-btn-success"type="submit">上传</button>
  15. </div>
  16. </div>
  17. </form>

enctype=“multipart/form-data”
{% csrf_token %}{{form.as_p}}
这两句是关键,一定要有,不然无法传到后台

5.在views.py中获取参数并写入数据库

代码如下(示例):

  1. from django.shortcuts import render
  2. from django.http import HttpResponse,JsonResponse
  3. from processes.models import Processlog
  4. def uploadFileSubmit(request):
  5. if 'username' in request.COOKIES:
  6. # 获取记住的用户名
  7. username = request.COOKIES['username']
  8. else:
  9. username = ''
  10. print(username)
  11. file = request.FILES.get('file_name')
  12. try:
  13. if file:
  14. Processlog.objects.create(file_name=file,username_id=username)
  15. return render(request,'processes/uploadFile.html',{'message': 1})
  16. else:
  17. return render(request, 'processes/uploadFile.html',
  18. {'message': 0})
  19. except Exception as e:
  20. print(e)
  21. # 2.使用模板
  22. return render(request, 'processes/uploadFile.html',
  23. {'message': 0})

file = request.FILES.get(‘file_name’)
这一步很重要,一定要是FILES.get
获取前端传过来的文件

6.最后就可以下面的位置上看到传过来的传文件了

在这里插入图片描述

总结

以上就是Django上传文件的全部内容啦
本店承接python相关网站的定制开发需,数据分析及答疑等需求,如有需要欢迎前往闲鱼进行咨询
在这里插入图片描述

标签: django python 后端

本文转载自: https://blog.csdn.net/weixin_42687772/article/details/124769833
版权归原作者 今生缘劫 所有, 如有侵权,请联系我们删除。

“Django实现文件上传”的评论:

还没有评论