美文网首页
flask & post

flask & post

作者: Plenari | 来源:发表于2019-08-22 23:10 被阅读0次

    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 -
    
    
    • 只有两个线程在工作?

    相关文章

      网友评论

          本文标题:flask & post

          本文链接:https://www.haomeiwen.com/subject/djbnsctx.html