flask 跨域請求


Flask中,跨域請求主要有兩種方式:

1、在響應頭信息中添加允許跨域

  如下,使用裝飾器app.after_request(我這里的web是定義的藍圖),這樣在每次請求后,加入header

  

 

2、使用第三方插件 flask-cors

  參考官方文檔:https://flask-cors.readthedocs.io/en/latest/

  首先,默認情況下,跨域會導致禁用cookie,還有確保已經做了csrf 攻擊處理

  1、安裝:pip install flask-cors

  2、使用:

    1)最簡單的使用方式:全局配置

      使用默認參數初始化Flask-Cors,這樣,所有的請求都將被允許跨域

      from flask-cors import CORS

      app = Flask(__name__)

      CORS(app)  # 直接將核心對象app作為參數

    2)使用 @cross_origin 裝飾器配置,這樣可以有針對性的指定那些視圖函數允許跨域

      @cross_origin

      def helloWorld():

        return "hello world"

    3)配置指定路徑下的視圖函數允許跨域(類似第一種,但是可以指定范圍)

      CORS(app, resource={r"/api/*" : {"origins" : "*"}})

      api路徑下的所有視圖函數都允許跨域訪問

      @app.router("/api/hello")

      def helloWorld():

        return "hello world"

    4)單獨配置藍圖

      web = Blueprint("web", __name__)

      CORS(web)

      @web.router("/hello")

      def helloWorld():

        return "hello world"

  3、常用CORS參數說明:

參數 類型 對應的Header字段 說明
resource 字典、迭代器或者字符串 全局配置允許跨域的API接口
origins 列表,字符串或者正則表達式 Access-Control-Allow-Origin 配置允許跨域訪問的源,* 表示允許所有
methods 列表,字符串 Access-Control-Allow-Methods 配置跨域支持的請求方式,如GET,POST等
allow_headers 列表,字符串或者正則表達式 Access-Control-Request-Headers 配置允許跨域的請求頭
support_credentials 布爾 Access-Control-allow-Credentials 是否允許請求發送cookie,false是不允許

 

  4、flask-cors日志的使用

    logging.getLogger("flask_cors").level = logging.DEBUG

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM