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方法就返回模板(第一次调用)