zoukankan      html  css  js  c++  java
  • 127.限制上传文件的类型

    限制文件的扩展名

    如果想要限制文件的扩展名,就要用到表单来限制。我们可以使用普通的Form表单也可以使用ModelForm表单,直接从模型中读取字段。示例代码如下:

    上传图片

    上传图片和上传普通文件一样,上传图片的时候Django会判断上传的图片的格式(除了判断后缀名,还会判断是否是可用的图片),如果不是那么,就会验证失败,我们首先来定义一个包含ImageField的模型,示例代码如下:
    from django.db import models
    from django.core import validators
    
    
    class Article(models.Model):
        title = models.CharField(max_length=100)
        content = models.CharField(max_length=100)
        # 指定字段类型为FileField,就可以定义上传文件的字段,并且指定参数upload_to就可以指定上传的文件存储的文件夹
        # 此处指定存储在项目文件下的files下。
        # 指定了该字段之后就不用再在views.py文件中定义打开,写入,保存文件的函数了。非常简单
        # thumbnail = models.FileField(upload_to="%Y%m%d", validators=[validators.FileExtensionValidator(['pdf','doc','zip'],message='文件的格式不正确')])
        thumbnail = models.ImageField(upload_to='%Y/%m/%d')
        
    
    如果想使用ImageField这个字段,就要首先安装Pillow库,执行pip install pillow。
    因为我们要验证是否提交上来的是否是图片,所以我们就可以通过form表单来验证
    from django import forms
    from .models import Article
    
    
    class ArticleForm(forms.ModelForm):
        class Meta:
            model = Article
            fields = '__all__'
    
    在views.py文件中进行验证:
    from django.shortcuts import render
    from django.http import HttpResponse
    from django.views import View
    from .models import Article
    from .forms import ArticleForm
    
    
    def save_file(file):
        with open('zjy.txt', 'wb') as fp:
            for chunk in file.chunks():
                fp.write(chunk)
    
    
    class IndexView(View):
    
        def get(self,request):
            form = ArticleForm()
            return render(request, 'uploadfile/index.html', context={'form':form})
    
        def post(self, request):
            form = ArticleForm(request.POST, request.FILES)
            if form.is_valid():
                form.save()
                return HttpResponse('success!')
            else:
                print(form.errors.get_json_data())
                return HttpResponse('fail')
    
    

    并且在浏览器中输入url可以进行查看上传的文件:http://127.0.0.1:8000/media/2020/02/15/AI.jpg。

    始于才华,忠于颜值;每件事情在成功之前,看起来都是天方夜谭。一无所有,就是无所不能。
  • 相关阅读:
    Json schema前奏 关于JSON
    笔试题:能被1~10同时整除的最小整数是2520,问能被1~20同时整除的最小整数是多少?
    CentOS7 安装 Docker、最佳Docker学习文档
    2019年4399暑期实习算法题2,迷宫路径条数
    2019vivo秋招提前批笔试题第3题
    python内存机制与垃圾回收、调优手段
    N皇后问题的python实现
    一行代码判断一个数是否是2的整数次方
    在O(1)的时间内删除链表节点
    打印从1到n位数的最大值
  • 原文地址:https://www.cnblogs.com/guyan-2020/p/12354627.html
Copyright © 2011-2022 走看看