当前位置:   article > 正文

Flask教程(十七)Flask跨域访问

flask跨域

软硬件环境

  • windows 10 64bit

  • anaconda3 with python 3.7

  • pycharm 2020.1.2

  • flask 1.1.2

  • flask-restful 0.3.8

  • flask-cors 3.0.8

什么是跨域?

跨域是指,浏览器从服务器A获取的静态资源,包括htmlcssjavascript,然后在javascript中通过ajax访问服务器B的静态资源或请求。

CORS

w3c组织制定了 [Cross Origin Resource Sharing](https://www.w3.org/TR/cors/) 的规范,简写为CORS,现在这个规范已经被大多数浏览器支持。

使用前一篇中的示例

  1. from flask import Flask, jsonify
  2. from flask_restful import Api, Resource, reqparse
  3. USERS = [
  4. {"name": "zhangsan"},
  5. {"name": "lisi"},
  6. {"name": "wangwu"},
  7. {"name": "zhaoliu"}
  8. ]
  9. class Users(Resource):
  10. def get(self):
  11. return jsonify(USERS)
  12. def post(self):
  13. args = reqparse.RequestParser() \
  14. .add_argument('name', type=str, location='json', required=True, help="名字不能为空") \
  15. .parse_args()
  16. self.logger.debug(args)
  17. if args['name'] not in USERS:
  18. USERS.append({"name": args['name']})
  19. return jsonify(USERS)
  20. app = Flask(__name__)
  21. api = Api(app, default_mediatype="application/json")
  22. api.add_resource(Users, '/users')
  23. app.run(host='0.0.0.0', port=5001, use_reloader=True, debug=True)

前端页面index.html

  1. <html>
  2. <body>
  3. <button type="button" onclick="jump()">Click Me!</button>
  4. <script>
  5. function jump(){
  6. let xhr = new XMLHttpRequest();
  7. xhr.open('GET', "http://192.168.1.210:5001/users", true);
  8. xhr.send();
  9. xhr.onreadystatechange = processRequest;
  10. function processRequest(e) {
  11. if (xhr.readyState == 4 && xhr.status == 200) {
  12. let response = JSON.parse(xhr.responseText);
  13. console.log(response)
  14. }
  15. }
  16. }
  17. </script>
  18. </body>
  19. </html>

我们将index.html部署在一台机器上(192.168.1.140),flask应用部署在另一台机器上(192.168.1.210),然后在浏览器中访问index.html,点击页面中的按钮,这时候就会报错了

flask-cors

flask配置cors

CORS需要在后端应用中进行配置。在flask中,可以使用扩展flask-cors,首先安装

pip install flask-cors

接下来来到manage.py,导入模块,并将flask应用包括起来就可以了,如下

  1. from flask_cors import CORS
  2. app = Flask(__name__)
  3. CORS(app)

重新启动应用,再次访问index.html,这时候,返回的结果就正常了

flask-cors

源码下载

https://github.com/xugaoxiang/FlaskTutorial

参考资料

  • https://flask-cors.readthedocs.io/en/latest/

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号