Django 实现文件上传和下载 - Go语言中文社区

Django 实现文件上传和下载


前言

  之前打算利用学过的Django在VCM上实现文件的上传、下载,避免有时候为了发个文件特意开一下QQ、微信。
  刚好前两天买了一年的VCM,所以打算今晚来试试。本来应该可以很快搞好的,毕竟之前已经很熟悉Django的使用了;然而,还是花了挺久的时间Debug,内心很烦躁。而这些Bug,主要是来自于网上的一些学术垃圾。学术垃圾,害人不浅!

环境配置

  CVM:Ubuntu 16.04.1 LTS
  Python 3.5.2(CVM自带)
  Django 2.1.2(安装方法请自行查找,基本上可以成功安装)

开发过程

  开发过程我就不想详细写了,没啥意思,懒得码字;主要是来记录一下遇到的坑:

  坑之一:

    网上某个教程:https://code.ziqiangxuetang.com/django/django-views-urls.html
  这篇教程总的来说还行吧。我们看一下它的第一步:
startproject
  我第二次使用这条命令的时候,发现会报错(我不记得自己第一次的时候是不是用的这条命令),不管了,反正这条命令我觉得可能会出错。可能是django-admin.py首行的解释器和系统的不一致吧。
  最好使用命令:python3 django-admin.py startproject yoursitename

  坑之二:

    坑之一其实还好,很容易跳过去;这个坑就是真的坑爹了。诅咒一下那些专业生产学术垃圾的垃圾
    垃圾教程:
https://www.cnblogs.com/liyqiang/articles/7858523.html
    百度上一搜“Django 文件上传"就可以发现这篇学术垃圾。看一下它的第一种方法:
在这里插入图片描述
    看一下它的前端,有一个 action="/upload/",作用是提交后网页重定向,避免重复提交文件;想法是好的,可惜,加上这个之后,文件根本就提交不到CVM上,而且还不会报错!tmd
    看一下它的后端,有一个 BASE_DIR ,这个是settings.py中的变量名,它也没有把之前的导入语句写出来,对新手很不友好。
    最初,我把 action="/upload/" 去掉了,因为我没有建立 upload 这个url;f=open 那一句的地址我也自己改了一下,成果上传了。
    可是后来,我为了实现重定向,竟然鬼使神差地加上了一句 action="/ok/"。然后我就发现,可以成功点击提交按钮,但是在CVM上就是看不到上传的文件,我一度开始怀疑人生,差点想放弃了。改了好多别的地方,一直没有用,真是痛苦死了。最最关键的是,它一直不报错!!!所以我根本就查不出到底哪里有问题!文件的保存地址改了很多次,就是没有用!
    后来,我把 action="/ok/" 删掉了,终于Debug成功了。
    重定向还是用 HttpResonseRedirect 吧,别去html表单里重定向!文件里要导入相应的包:from django.http import HttpResponseRedirect
    这是我的有Bug的代码片段:

<form action="/ok/" method="post" enctype="multipart/form-data">
				{% csrf_token %}
				<input type="file" name="zqfile">
				<input type="submit">
			</form>

    这是修改后的代码片段:

<form method="post" enctype="multipart/form-data">
				{% csrf_token %}
				<input type="file" name="zqfile">
				<input type="submit">
			</form>

Tips

  哎,其实也没啥好写的,就是心里很烦躁。以后还是得多看几篇博客再去动手,不要看到一篇就奉为圭臬,多结合几篇,综合一下,这样比较好,毕竟学术垃圾实在是太多了。
  还有一些静态文件配置方法,自行查阅吧,我不想写了。
  后期再完善一下网站。
  烦躁。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/ZQ_ZJUer/article/details/82974897
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢