静态文件

动态 web 应用也会需要静态文件,通常是 CSS 和 JavaScript 文件。理想状况下, 你已经配置好 Web 服务器来提供静态文件,但是在开发中,Flask 也可以做到。 只要在你的包中或是模块的所在目录中创建一个名为static的文件夹,在应用中使用/static即可访问。

给静态文件生成 URL ,使用特殊的'static'端点名:

url_for('static', filename='style.css')

这个文件应该存储在文件系统上的static/style.css。

文件上传

用 Flask 处理文件上传很简单。只要确保你没忘记在 HTML 表单中设置enctype="multipart/form-data"属性,不然你的浏览器根本不会发送文件。

已上传的文件存储在内存或是文件系统中一个临时的位置。你可以通过请求对象的files属性访问它们。每个上传的文件都会存储在这个字典里。它表现近乎为一个标准的 Pythonfile对象,但它还有一个save()方法,这个方法允许你把文件保存到服务器的文件系统上。这里是一个用它保存文件的例子:

from flask import request

@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        f = request.files['the_file']
        f.save('/var/www/uploads/uploaded_file.txt')
    ...

如果你想知道上传前文件在客户端的文件名是什么,你可以访问filename属性。但请记住, 永远不要信任这个值,这个值是可以伪造的。如果你要把文件按客户端提供的文件名存储在服务器上,那么请把它传递给 Werkzeug 提供的secure_filename()函数:

from flask import request
from werkzeug import secure_filename

@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        f = request.files['the_file']
        f.save('/var/www/uploads/' + secure_filename(f.filename))
    ...

其它案例:

#使用配置定义上传目录
app.config["UP_DIR"] = os.path.join(os.path.abspath(os.path.dirname(__file__)), "static/uploads/")

f = request.files.get('face',None)
if f:
    Suffix = f.filename.split('.').pop()
    filename = str(time.time())+str(random.randint(10000,99999))+'.'+Suffix
    f.save(app.config["UP_DIR"]+ filename)
else:
    filename = app.config["UP_DIR"]+ 'user.jpg'
Copyright © shxdledu.cn 2018 all right reserved,powered by Gitbook该文件修订时间: 2019-04-10 23:05:54

results matching ""

    No results matching ""