学弟教程-Python-Flask设置允许跨域

文章目录

问题

前端使用XMLHttpRequest发送GET请求时,后端Flask框架已经接收到了请求,但前端无法显示返回值

前端代码

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <script>
        function loadXMLDoc() {
            var xmlhttp;
            if (window.XMLHttpRequest) {
                //  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
                xmlhttp = new XMLHttpRequest();
            } else {
                // IE6, IE5 浏览器执行代码
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange = function () {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    var v = xmlhttp.responseText
                    console.log(v)
                    alert(v)
                }
            }
            xmlhttp.open("GET", "http://127.0.0.1:5000/", true);
            xmlhttp.send();
        }
    </script>
</head>

<body>
    <button type="button" onclick="loadXMLDoc()">获取内容</button>
</body>

</html>

后端代码

from flask import Flask

app = Flask(__name__)


@app.route('/', methods=['GET', 'POST'])
def hello_world():
    return 'HELLO'


if __name__ == '__main__':
    app.run()

分析

使用F12进入控制台后发现如下错误

通过查询此为跨域问题,所以需设置Flask允许跨域

解决

Flask配Cors跨域,使用flask-cors包,并有两种方式

方式 范围 特点
@cross_origin装饰器 单个路由 适用于配置特定的API接口
CORS函数 配置全局API接口 适用于全局的API接口配置
pip install flask-cors

将后端代码修改为:

from flask import Flask
from flask_cors import cross_origin

app = Flask(__name__)


@app.route('/', methods=['GET', 'POST'])
@cross_origin()
def hello_world():
    return 'HELLO'


if __name__ == '__main__':
    app.run()

运行结果

猜你喜欢

转载自blog.csdn.net/qq_41452937/article/details/107526448