zoukankan      html  css  js  c++  java
  • Django之文件上传

    1:文件上传是网站中常见的功能,一般用form表单来提交:

    HTML

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

    view

    from django.shortcuts import render,HttpResponse
    from django.views.generic import View
    from .forms import IndexFrom
    class IndexView(View):
    
        def get(self,request):
            return render(request,"index.html")
    
        def post(self,request):
            myfile = request.FILES.get("myfile")  //接收file文件
            with open("aa.txt","wb") as fp:   
                for chunk in myfile.chunks():
                    fp.write(chunk)
            return HttpResponse("ok")

      结果会在项目目录中多了一个aa.txt文件

      2:使用模型来处理上传文件

      model:

    class Article(models.Model):
        title = models.CharField(max_length=20)
        content = models.CharField(max_length=100)
        thumbnail = models.FileField(upload_to="files")   //定义一个FileField字段,upload_to表示上传来的文件放在哪个文件夹也可以(upload_to="%Y%m%d")

    view:

      def post(self,request):
            title = request.POST.get("title")
            content = request.POST.get("content")
            thumbnail = request.FILES.get("myfile")  //获取文件
            article = Article.objects.create(title=title,content=content,thumbnail=thumbnail)
            article.save()
            return HttpResponse("ok")

      3指定MEDIA_ROOT和MEDIA_URL:

      在setting中添加这两个字段:

      

    MEDIA_ROOT = os.path.join(BASE_DIR,"media")        //表示长传的文件存放的目录(就可以不再upload_to中设置l)
    MEDIA_URL = "/media/"   //访问这个文件的路径

    url.py 需要设置路径:

    from django.conf.urls.static import static
    from django.conf import settings
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path("",views.IndexView.as_view())
    ]+static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

      4限制文件拓展名:

      

    from django.db import models
    from django.core import validators
    
    class Article(models.Model):
        title = models.CharField(max_length=20)
        content = models.CharField(max_length=100)
        thumbnail = models.FileField(upload_to="%Y/%m/%d",validators=[validators.FileExtensionValidator(["txt","pdf"])])  //通过validator来限制

      5上传图片:(上传图片需要安装Pillow库)(pip install Pillow)

      

     images = models.ImageField(upload_to="files")   //方法和上面一样
  • 相关阅读:
    JMETER接口测试问题三之Host of origin may not be blank
    JMETER接口测试问题解决二之后续接口请求依赖登录接口的操作
    JMETER接口测试问题一之请求超时报错
    jmeter接口测试之json提取器的使用方法二
    JMETER接口测试之Debug sample
    JMTER接口测试之JSON提取器
    EXCEL批量导入到Sqlserver数据库并进行两表间数据的批量修改
    Linq的整型或实体类null引发的报错问题
    SqlServer 统计1-12月份 每个月的数据(临时表)
    select2的多选下拉框上传
  • 原文地址:https://www.cnblogs.com/yan-peng/p/10271960.html
Copyright © 2011-2022 走看看