前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >django-文件上传

django-文件上传

作者头像
kirin
发布2020-05-09 15:45:13
1.1K0
发布2020-05-09 15:45:13
举报
文章被收录于专栏:Kirin博客Kirin博客

今天尝试了文件上传,基于from表单下的, 多了两个设置, 1.MEDIA_URL 2.MEDIA_ROOT 这两个设置需要在setting中写好路径, 然后在models中新建一个类用来储存上传信息 class Files(models.Model): files=Filesfiled(upload_to=’media’) 默认如果在media_root中设置了路径就不需要填写了,没有设置就需要填写upload_to这项。 还有就是在前端文件提交表单中必须要有 enctype=”multipart/form-data” 这一项,这样后台才能明白你是要上传一个文件,而不是获取文件名,可以通过file.name 或者file.size 获取文件的大小,还可以获取文件的后缀用来限制上传文件的类型。 然后在视图中只需要把model中的类导入 然后Files.objects.create(file=file)这样前台提交的文件就模型就直接帮我们记录好,然后提交到了数据库记录,放到了media文件夹下,非常的方便,省掉了很多的麻烦。不用自己再去写一个文件上传的逻辑,像这样 *** print(file,type(file)) if not file: return HttpResponse(‘没有文件呀,老铁’) # 保存文件 with open(os.path.join(f’./{file}’),’wb’)as f: # 用chunk 分块写入就不会报错了, for chunk in file.chunks(): f.write(chunk) *** 自己写的话保存文件的时候一定要写chunks这一步,不然会报出notype的错误,大致的意思就是不能保存字符串之类的提示,很烦人。而直接用模型的话就不会有这个提示,而且逻辑更加的清晰,后续的判断也更加方便

view视图

def index(request):
    f=models.Files.objects.all()
    if request.method=='POST':
        file=request.FILES.get('file',None)

        # print(file,type(file))
        if not file:
            return HttpResponse('没有文件呀,老铁')
        # # 保存文件
        # with open(os.path.join(f'./{file}'),'wb')as f:
        #     # 用chunk 分块写入就不会报错了,
        #     for chunk in file.chunks():
        #         f.write(chunk)
        models.Files.objects.create(file=file,title=file,size=file.size)
        return HttpResponse('完成')
    return render(request,'base.html',context={'data':f})

models
class Files(models.Model):
    title=models.CharField(max_length=100,verbose_name='文件名')
    size=models.CharField(max_length=100,verbose_name='文件大小',null=True)
    file=models.FileField(verbose_name='地址')
    times=models.DateTimeField(auto_now_add=True,verbose_name='上传时间')


html
<form id="form" action="" method="post" runat="server" enctype="multipart/form-data">
# 一定要加上这句


urls
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('project.urls')),
] + static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-03-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档