zoukankan      html  css  js  c++  java
  • Django笔记:文件上传

    Django中上传的文件,除了使用普通的方式接收外,还可以通过ORM模型来自动接收。

    前端文件提交

    下面是一种较为通用的文件提交方式,这种方式需要注意,form标签的enctype属性值必须为multipart/form-data,用于文件提交的input标签的type属性值也必须是file,当然,请求method也需要是post

    <form action="" method="post" enctype="multipart/form-data">
        <input type="file" name="myfile">
        <input type="submit" name="提交">
    </form>
    

    普通方式上传文件

    普通的文件接收方式就是将request.FILES中的文件对象获取出来再手动写入一个新的文件即可。

    from django.http import HttpResponse
    from django.shortcuts import render
    from django.views.generic import View
    
    
    # 新建一个视图
    class IndexView(View):
        # 返回文件上传的界面
        def get(sel, request):
            return render(request, 'index.html')
    
        # 获取上传的文件,并保存到新的文件中
        def post(self, request):
            myfile = request.FILES.get('myfile')
            with open('somefile.txt', 'wb') as fp:
                for chunk in myfile.chunks():
                    fp.write(chunk)
    
            return HttpResponse('success!')
    

    使用ORM模型自动接收

    这种方式需要在ORM模型中定义一个models.FileField字段,并指定upload_to参数,此参数为文件存放的目录路径,是一个相对于项目根目录的相对路径。upload_to参数除了直接指定路径名外,还可以使用当前日期来指定路径,如%Y/%m/%d/表示根据当前的年月日信息新建三层目录,上传的文件就放在此目录下(字符串中的斜杠表示路径分隔符)。指定的目录不存在的话,会自动新建。
    注1:如果在settings.py中配置了MEDIA_ROOT,则默认会将上传的文件放在此目录下,如果同时也指定了uplodad_to参数,则会在此目录下再新建对应目录来存放文件。
    注2:如果要上传图片,可以使用models.ImageField字段,用法和models.FileField是一样的。使用这个字段时,如果提示安装Pillow库,则按提示安装即可,Django中处理图片需要用到这个库。安装方法:pip install pillow

    from django.db import models
    
    
    # 随意新建一个ORM模型
    class Article(models.Model):
        title = models.CharField(max_length=100)
        content = models.TextField()
        file = models.FileField(upload_to='upload_files')
    
        # 可以按照日期来新建目录,注意斜杠表示目录分隔,%Y/%m/%d/会新建三层目录
        # file = models.FileField(upload_to='%Y/%m/%d/')
    
    from django.http import HttpResponse
    from django.shortcuts import render
    from django.views.generic import View
    from .models import Article
    
    
    class IndexView(View):
        def get(self, request):
            return render(request, 'index.html')
    
        def post(self, request):
            title = request.POST.get('title')
            content = request.POST.get('content')
            # 获取文件并使用ORM模型来进行自动保存
            file = request.FILES.get('myfile')
            # 除了会将提交信息保存到数据库中,还会自动将文件保存到upload_to参数指定的目录下
            Article.objects.create(title=title, content=content, file=file)
    
            return HttpResponse('success!')
    
  • 相关阅读:
    【C++】资源管理
    【Shell脚本】逐行处理文本文件
    【算法题】rand5()产生rand7()
    【Shell脚本】字符串处理
    Apple iOS产品硬件参数. 不及格的程序员
    与iPhone的差距! 不及格的程序员
    iPhone游戏 Mr.Karoshi"过劳死"通关. 不及格的程序员
    XCode V4 发布了, 苹果的却是个变态. 不及格的程序员
    何时readonly 字段不是 readonly 的?结果出呼你想象!!! 不及格的程序员
    object file format unrecognized, invalid, or unsuitable Command 不及格的程序员
  • 原文地址:https://www.cnblogs.com/guyuyun/p/13837957.html
Copyright © 2011-2022 走看看