前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >30. Flask 设置headers Access-Control-Allow-Origin实现跨域访问

30. Flask 设置headers Access-Control-Allow-Origin实现跨域访问

作者头像
Devops海洋的渔夫
发布2022-01-14 17:19:46
7790
发布2022-01-14 17:19:46
举报
文章被收录于专栏:Devops专栏Devops专栏

需求

一般前端如果直接发起请求至后台,都会出现跨域问题。报错如下:

17 Vue 使用 vue-resource 发起get、post、jsonp请求.html:1 Access to XMLHttpRequest at 'http://127.0.0.1:5000/login' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

下面示例Flask设置headers['Access-Control-Allow-Origin']='*'头信息,解决跨域api问题。

Flask示例如下:

代码语言:javascript
复制
from flask import Flask, jsonify,request,make_response

# 实例化app
app = Flask(import_name=__name__)


@app.route('/login', methods=["GET","POST"])
def login():

    method = request.method

    res = make_response(jsonify(token=123456, gender=0, method = method))  # 设置响应体
    res.status = '200'  # 设置状态码
    res.headers['Access-Control-Allow-Origin'] = "*"  # 设置允许跨域
    res.headers['Access-Control-Allow-Methods'] = 'PUT,GET,POST,DELETE'
    return res

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

此时,设置好了这两个headers的参数,如下:

代码语言:javascript
复制
res.headers['Access-Control-Allow-Origin'] = "*"  # 设置允许跨域
res.headers['Access-Control-Allow-Methods'] = 'PUT,GET,POST,DELETE'

则会允许 get、post 的跨域请求,下面前端测试如下。

前端测试执行跨域get、post请求

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--  1.导入vue.js库  -->
    <script src="lib/vue.js"></script>
    <!--  2.导入vue-resource,注意:需要先引入vue.js  -->
    <script src="lib/vue-resource-1.5.1.js"></script>

</head>
<body>

<div id="app">
    <input type="button" value="get请求" @click="getInfo">
    <input type="button" value="post请求" @click="postInfo">
    <input type="button" value="jsonp请求" @click="jsonpInfo">
</div>

<script>

    // 2. 创建一个Vue的实例
    var vm = new Vue({
        el: '#app',
        data: {},
        methods: {
            getInfo() { // 发起get请求
                //  当发起get请求之后, 通过 .then 来设置成功的回调函数
                this.$http.get('http://127.0.0.1:5000/login').then(function (result) {
                    // 通过 result.body 拿到服务器返回的成功的数据
                    // console.log(result.body)
                })
            },
            postInfo() { // 发起 post 请求   application/x-wwww-form-urlencoded
                //  手动发起的 Post 请求,默认没有表单格式,所以,有的服务器处理不了
                //  通过 post 方法的第三个参数, { emulateJSON: true } 设置 提交的内容类型 为 普通表单数据格式
                this.$http.post('http://127.0.0.1:5000/login', {}, { emulateJSON: true }).then(result => {
                    console.log(result.body)
                })
            },
        },

    });

</script>

</body>
</html>

浏览器执行前端请求如下:

  • 执行get请求
  • 执行post请求

此时get和post都可以跨域请求了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海洋的渔夫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需求
    • Flask示例如下:
      • 前端测试执行跨域get、post请求
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档