Python只是一种开发语言,既然是程序开发语言当然有他自己语法规则,掌握语法规则写法是第一步。说开发思维其实就是让一个功能无限分解到用代码实现的一个反向思维逻辑。打个不恰当的栗子:大家去菜市场买菜是出门之后到菜市场看有什么菜,自己喜欢什么菜买回来就好。而编程思维是:最终实现目标是买什么菜、到哪买、怎么去、什么回来,等等一系列的动作组成的,软件是一个比较精准的操作,你让他买白菜他肯定不会给你买萝卜。所谓的编程思维其实就是对功能的反向思维能力。
flask文件如何上传
这是一个具体的代码操作问题,其实思维逻辑跟其他语言是一样。
文件上传的基本概念实际上非常简单,他基本是这样工作的:
一个<form>标签被标记有enctype=multipart/form-data,并且在里面包含一个<inputtype=file>标签。
服务端应用通过请求对象上的files字典访问文件。
使用文件的save()方法将文件永久地保存在文件系统上的某处。
让大家建立一个非常基础的小应用,这个小应用可以上传文件到一个指定的文件夹里,然后将这个文件显示给用户。让大家看看这个应用的基础代码:
importosfromflaskimportFlask,request,redirect,url_forfromwerkzeugimportsecure_filenameUPLOAD_FOLDER=’/path/to/the/uploads’ALLOWED_EXTENSIONS=set([‘txt’,’pdf’,’png’,’jpg’,’jpeg’,’gif’])app=Flask(__name__)app.config[‘UPLOAD_FOLDER’]=UPLOAD_FOLDER
下一步,就是检查文件类型是否有效、上传通过检查的文件、以及将用户重定向到已经上传好的文件URL处的函数了:
defallowed_file(filename):return’.’infilenameand\filename.rsplit(‘.’,1)[1]inALLOWED_EXTENSIONS@app.route(‘/’,methods=[‘GET’,’POST’])defupload_file():ifrequest.method==’POST’:file=request.files[‘file’]iffileandallowed_file(file.filename):filename=secure_filename(file.filename)file.save(os.path.join(app.config[‘UPLOAD_FOLDER’],filename))returnredirect(url_for(‘uploaded_file’,filename=filename))return”'<!doctypehtml><title>UploadnewFile</title><h3>UploadnewFile</h3><formaction=””method=postenctype=multipart/form-data><p><inputtype=filename=file><inputtype=submitvalue=Upload></form>”’
那么secure_filename()函数具体做了那些事呢?现在的问题是,有一个信条叫做“永远别相信你用户的输入”,这句话对于上传文件的文件名也是同样有效的。所有提交的表单数据都可以伪造,而文件名本身也可能是危险的。在摄氏只需记住:在将文件保存在文件系统之前,要坚持使用这个函数来确保文件名是安全的。
下面附带一个完整的上传文件代码:
上面大家写了一个上传接口,大家为了测试这个接口是否工作正常,还得写一个页面(upload.html):