• 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。

    始于才华,忠于颜值;每件事情在成功之前,看起来都是天方夜谭。一无所有,就是无所不能。
  • 相关阅读:
    【Oracle】实体化视图
    安装Linux Centos系统硬盘分区方法
    .NET基础一
    【MySQL】无法启动mysql服务(位于本地计算机上)错误1067,进程意外中止
    Linux基础一
    SQL Server中生成100万行8位纯数字的随机数(转)
    SQL Server配置数据库邮件
    SQL点点滴滴_聪明的小写法(持续更新中)
    过去的2017和已经到来的2018
    【Oracle】PL/SQL Developer使用技巧(持续更新中)
  • 原文地址:https://www.cnblogs.com/guyan-2020/p/12354627.html
Copyright © 2020-2023  润新知