Python Flask request中常见存储参数的介绍
首先从flask模块中导入请求对象:
from flask import request
request.form
通过method属性可以操作当前请求方法,通过使用form属性处理表单数据(本质也是得到一个字典,如果传输的是字典也可以用form)默认的数据类型时ImmutableMultiDict,可以通过parameter_storage_lass改变数据类型。一个简单的例子:
@app.route('/predict', methods=['POST', 'GET'])
def predict():
if request.method == "POST":
img_url = request.form['IMG_URL']
#或者通过get获取
img_url = request.form.get('IMG_URL')
if img_url is None:
return jsonify({'error':'No data was got'}), 400
return img_url
当form属性中不存在这个key时,会引发一个KeyError,会显示一个HTTP400 Bad Request的错误页面,多数情况下可以不用处理这个问题。
request.args
要操作URL(如?key=value)中提交的参数,可以使用args属性。默认的数据类型也是ImmutableMultiDict,可以通过parameter_storage_class改变数据类型。参数获取和form相同
url = 'http://170.0.0.1:5000/pre?id=1&name=zane'
#返回值是{"id" : "1", "name" : "zane"}
#获取某个具体参数:
id = request.args['id']
id = request.args.get('id')
request.values
values结合form和args,默认类型是CombinedMultiDict,可以用values替代form和args。
request.data
data返回的是bytes类型数据,通常传递base64编码的图像数据,会用到data。
base64data = request.data
data = base.b64decode(base64data)
data = np.fromstring(data, np.uint8)
img = cv2.imdecode(data, cv2.IMREAD_COLOR)
request.json
当在Header中设置 Content-Type:application/json,获取的数据降被转换成json数据,不能使用data进行获取,只能用json获取。
request.files
files用于处理文件上传,前提需要设置HTML表单中enctype="multipart/from-data"属性。已上传的文件,被存储在内存活文件系统的临时位置,通过files属性来访问上传文件,每个上传文件都存储在字典属性中,该属性和Python file对象一样,多出一个save()方法。
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
@app.route('/', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
# check if the post request has the file part
if 'file' not in request.files:
flash('No file part')
return redirect(request.url)
file = request.files['file']
# if user does not select file, browser also
# submit an empty part without filename
if file.filename == '':
flash('No selected file')
return redirect(request.url)
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return redirect(url_for('uploaded_file',
filename=filename))
return '''
Upload new File
'''
在使用文件上传的时候,也可以通过Flask-Uploads扩展来实现,这个扩展实现了完整的上传机制,还具有白名单、黑名单等功能。
好文阅读
发表评论