文章目录

  • 一、Django如何实现文件上传?
  • 二、使用步骤
  • 1.在setting.py中添加如下代码
  • 2.models.py中新建包含FileField的model
  • 3.urls.py中指定上传文件根目录
  • 4.在HTML文件中添加上传文件的控件
  • 5.在views.py中获取参数并写入数据库
  • 6.最后就可以下面的位置上看到传过来的传文件了
  • 总结

  • 一、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相关网站的定制开发需,数据分析及答疑等需求,如有需要欢迎前往闲鱼进行咨询

    来源:今生缘劫

    物联沃分享整理
    物联沃-IOTWORD物联网 » Django实现文件上传

    发表评论