flask文件上传和地址参数

flask文件上传和地址参数


直接传入

根据网页的地址参数传递到页面

访问网址http://127.0.0.1:5000/user/gougou

得到User gougou 这里的名字是变动的

我们一样定义一个视图函数

@app.route('/user/<username>')
def user(username):
    return 'User %s' % username

这里网址中的参数会传递给username

我们可以指定传入参数的类型

@app.route('/user/<int:user_id>')
def user(user_id):
    return 'User_id %s' % user_id
http://127.0.0.1:5000/user/123
//打印出

User_id 123

转换类型有三种

  • int
  • float
  • path

网址的正则

重写类

from werkzeug.routing import BaseConverter

class RegexConverter(BaseConverter):
    def __init__(self, url_map, *items):
        super(RegexConverter, self).__init__(url_map)
        self.regex = items[0]

app = Flask(__name__)之后添加创建的类 与url_map关联

app = Flask(__name__)
app.url_map.converters['regex'] = RegexConverter

在route中添加 正则表达式
格式 : <regex("RegularExpression"):who>

@app.route('/user/<regex("[a-z]{3}"):user_id>')
def user(user_id):
    return 'User_id %s' % user_id

两个路径可以指向同一个视图函数 访问的效果是一样的

@app.route('/about')
@app.route('/info')
def about():
    return 'About'

flask文件上传

  • html模板部分
<html>
<head>
    <title>文件上传</title>
    <meta charset="utf-8">
</head>
<body>
    <form action='' method=post enctype= multipart/form-data>
        <p>

            <input type=file name=file>
            <input type="submit" name='Upload'>
        </p>
    </form>
</body>
</html>

一定要指定 multipart/form-data

  • flask视图部分
@app.route('/upload',methods=['GET', 'POST'])
def upload():
    if request.method == 'POST':
        f =  request.files['file']
        basepath = path.abspath(path.dirname(__file__))
        upload_path = path.join(basepath, 'static/uploads') 

        print '提交路径' + upload_path

        f.save(upload_path+'/'+f.filename)

        # 上传成功后
        return redirect(url_for('upload'))
    return render_template('upload.html')

如果是POST请求就是上传文件的请求,确认上传路径和文件名.

存储方法

f.save(upload_path+'/'+f.filename)

之后成功后再次 定向到 upload方法,相当于又访问了一次,回到起点。

如果是GET方法就返回模板(第一次调用)

本文总阅读量