1,跨域
app = Flask(__name__)
api = Api(app)
@app.after_request
def after_request(response):
response.headers.add('Access-Control-Allow-Origin', '*')
#或者,跨域。
#response.headers['Access-Control-Allow-Origin']= '*'
response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization')
response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS')
return response
if __name__ == '__main__':
app.run()
被app.after_request修饰过的函数会在请求得到相应后返回给用户前被调用,也就是说,这个时候,请求已经被app.route装饰的函数响应过了,已经形成了response,我们在这个时候做一些操作,flask有一个插件叫 flask-compress,是对响应结果进行压缩的,它就是用after_request的这个机制,在response返回前对数据进行了压缩,如果你有别的想要操作的事情,同样可以使用after_request来完成。
接收文件
客户端:
import requests
files={'file':(filename,open(filename,'rb'))}
requests.port(url,files=files)
服务端
from flask import request
@app.route('/')
def index():
data=request.file
file=data['file']
filename=file.filename
file.save(path)
接收二进制
可以二进制数据encode转成base64,然后转成json。
最后把base64字符串decode成二进制数据。
flask 多进程多线程
- 注意:多进程或多线程只能选择一个,不能同时开启
import os
from flask import Flask
import time
app=Flask(__name__)
@app.route('/')
def index():
return 'hello'
@app.route('/get')
def get():
time.sleep(2)
return str(os.getpid())
if __name__=="__main__":
# 多进程,每一个新连接都会新建一个进程,这样的话进程数设置为5还有什么意义?
app.run(host='0.0.0.0',port=5000,processes=6)
import os
from flask import Flask
import threading
import time
app=Flask(__name__)
class data:
ident=[]
@app.route('/')
def index():
return 'hello'
@app.route('/get')
def get():
time.sleep(5)
#return str(os.getpid())
print(time.time()-stime)
print(threading.currentThread().ident)
return str(threading.currentThread().ident)
if __name__=="__main__":
stime=time.time()
app.run(host='0.0.0.0',port=5000,threaded=True)
- 调用四次的结果如下
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
10.874930620193481
140233200768768
192.168.119.1 - - [13/Dec/2019 18:00:32] "GET /get HTTP/1.1" 200 -
15.882457494735718
140233192376064
192.168.119.1 - - [13/Dec/2019 18:00:37] "GET /get HTTP/1.1" 200 -
20.891161680221558
140233200768768
192.168.119.1 - - [13/Dec/2019 18:00:42] "GET /get HTTP/1.1" 200 -
25.901167392730713
140233192376064
192.168.119.1 - - [13/Dec/2019 18:00:47] "GET /get HTTP/1.1" 200 -
- 只有两个线程在工作?
网友评论