0


Django实现文件上传

文章目录


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

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

二、使用步骤

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

代码如下(示例):

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

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

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

代码如下(示例):

import uuid
import datetime
from django.db import models

def image_upload_to(instance, filename):#文件的时间戳
    #print(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
    id = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S").replace('-','').replace(' ','').replace(':','')
    filename = filename.replace('.csv','_')+id+'.csv'#print(filename)return'file/+{filename}'.format(uuid=uuid.uuid4().hex, filename=filename)

class Processlog(models.Model):'''日志单模型类'''
    file_name = models.FileField(upload_to=image_upload_to,null=False,blank=False)
    upload_time = models.DateTimeField(auto_now_add=True)
    download_time = models.DateTimeField(null=True,blank=True)
    username = models.ForeignKey(User, on_delete=models.CASCADE, to_field='username')

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


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

代码如下(示例):

from django.conf.urls import  url
from processes import views
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    url(r'^uploadFileSubmit$', views.uploadFileSubmit),
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) #这是关键

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

代码如下(示例):

<form class="am-form am-form-horizontal" action="uploadFileSubmit" method="post" style="padding-top: 30px;" enctype="multipart/form-data">
                            {% csrf_token %}{{form.as_p}}
                            <input value="504" name="roleId" type="hidden">
                            <div class="am-form-group">
                                <label for="rep-no" class="am-u-sm-3 am-form-label">
                                文件
                                </label>
                                <div class="am-u-sm-9">
                                    <input id="file_name" required="" placeholder="" value="{{file_name}}" name="file_name" type="file">

                                </div>
                            </div>
                            <div class="am-form-group">
                                <div class="am-u-sm-9 am-u-sm-push-3">
                                    <button id="addRole" class="am-btn am-btn-success"type="submit">上传</button>
                                </div>
                            </div>
                        </form>

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

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

代码如下(示例):

from django.shortcuts import render
from django.http import HttpResponse,JsonResponse
from processes.models import Processlog

def uploadFileSubmit(request):
    if 'username' in request.COOKIES:
        # 获取记住的用户名
        username = request.COOKIES['username']
    else:
        username = ''
    print(username)
    file = request.FILES.get('file_name')
    try:
        if file:
            Processlog.objects.create(file_name=file,username_id=username)

            return render(request,'processes/uploadFile.html',{'message': 1})
        else:
            return render(request, 'processes/uploadFile.html',
                   {'message': 0})
    except Exception as e:
        print(e)
        # 2.使用模板
        return render(request, 'processes/uploadFile.html',
                      {'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实现文件上传”的评论:

还没有评论