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

    Django学习之文件上传

    就这么六步!

    一、settings配置文件中配置

    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR, 'medias').replace('\', '/')#media即为图片上传的根路径
    

    二、url路由中配置

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^index/', views.index,name='index'),
    
    ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) #如果单纯的是上传,文件并不用来显示或者读取,就不用加这个
    

    三、models.py文件中的写法

    class Book(models.Model):
    
        name = models.CharField(max_length=32)
        date1 = models.DateTimeField(auto_now=True,null=True)
        date2 = models.DateTimeField(auto_now_add=True,null=True)
        img = models.ImageField(upload_to='img',null=True) #写上upload_to,后面指定一个路径,那么将来上传的文件会直接生成到配置文件中的那个medias文件夹中的img文件夹中,不需要我们自己写读取文件内容写入本地文件的操作,django内部帮我们自动处理了
    

    四、views视图函数中的写法,上传一个图片:

    def index(request):
    
        if request.method == 'POST':
            print(request.POST)
            username = request.POST.get('username')
            print('files',request.FILES)
            file_obj = request.FILES.get('file')
            models.Book.objects.create(
                name=username,
                img=file_obj,
            )  #自动就会将文件上传到我们配置的img文件夹中
            return render(request,'index.html')
    

    五、更新上传了的文件(注意,只是会更新数据库中那个字段保存的文件的路径,但是之前上传的文件是不会被自动删除的,需要我们自行再写逻辑来删除之前上传错的或者需要被覆盖的文件。还有就是如果上传的文件名称是相同的那么你会发现数据库中这个字段的路径后面的文件名称会出现一个乱起八糟的随机字符串,这是因为上传的文件名称冲突了,django为了解决这个冲突,给你改了一下你的文件名称。)

    obj = models.Book.objects.get(name='chao2')
    obj.img=file_obj
    obj.save()
    
    #下面的update方法是不能更新正确更新保存的文件路径的,除非我们自己手动拼接文件路径,然后img=路径来进行update更新
    models.Book.objects.filter(name='chao2').update(img=file_obj)
    

    六、查看已经上传了的文件(就需要借助我们上面在settings配置文件中和url中的配置了)

    views.py视图函数的写法:

    def index(request):
            objs = models.Book.objects.all()
            return render(request,'index.html',{'objs':objs})
    

    index.html文件中的写法:

    <div>
        {% for obj in objs %}
            <img src="/media/{{ obj.img }}" alt="">
        {% endfor %}
    
    </div>
    
    <div>
        {% for obj in objs %}
            <img src="/media/{{ obj.img }}" alt="">
            <!--<img src="/media/{{ obj.img.name }}" alt="">-->
        {% endfor %}
    
    </div>
    
  • 相关阅读:
    sql被注入,用友不能建账
    项目总帐金额翻倍
    1)123104科目的余额出现翻倍情况,经调数据库,期初余额已调平,但余额表中的数仍是未调平前的错误数。2)一月结账时提示有一科目119101的总账与个人明细账不平....
    尚有已全部暂估报销的单据未进行处理,不能进行12月的期末处理
    用友U8尚有已全部暂估报销的单据未进行处理,不能进行12月的期末处理
    用sql替换T6工作流中的操作员
    解决win7科迈登录报错RASRDP MODULE已停止工作
    sql2005 64 位 连接 sql2000 32位
    jquery选择器
    深入理解jQuery中$.get、$.post、$.getJSON和$.ajax的用法
  • 原文地址:https://www.cnblogs.com/ciquankun/p/11711362.html
Copyright © 2011-2022 走看看