python-跨域请求、flask、django的解决办法

359 阅读2分钟

跨域请求

假设有一个网站A,它需要从另一个网站B获取数据。 由于浏览器的同源策略限制,网站A无法直接访问网站B的数据。这时就需要使用跨域请求来解决这个问题。

跨域请求分为两种:

  • 服务器端跨域
  • 客户端跨域。

在服务器端进行跨域处理时,需要在服务器端设置响应头信息,允许来自其他域名的请求访问数据。

在客户端进行跨域处理时,需要使用XMLHttpRequest对象或Fetch API发起请求,并设置请求头的origin属性为当前域名。例如,使用XMLHttpRequest对象发起请求

python flask中如何处理跨域问题?

在Python Flask中处理跨域问题,可以使用Flask-CORS扩展。

以下是使用Flask-CORS的步骤:

pip install -U flask-cors

from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
CORS(app)  # 允许所有域名访问

@app.route('/')
def hello():
    return 'Hello, World!'

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

我们导入了Flask和CORS,然后在创建Flask应用后,使用CORS(app)来允许所有域名访问

CORS(app, resources={r"/api/*": {"origins": "http://example.com"}})

这将只允许来自example.com的请求访问以/api/开头的路由。

python django中如何处理跨域问题?

在Python Django中,可以使用CORS(跨域资源共享)来处理跨域问题。

pip install django-cors-headers

# 在settings.py文件中添加以下代码
INSTALLED_APPS = [
    ...,
    'corsheaders',
    ...,
]

MIDDLEWARE = [
    ...,
    'corsheaders.middleware.CorsMiddleware',
    ...,
]

CORS_ORIGIN_ALLOW_ALL = True # 允许所有域名访问

上述代码将django-cors-headers添加到了INSTALLED_APPS和MIDDLEWARE中,并开启了CORS_ORIGIN_ALLOW_ALL选项,表示允许所有域名访问。如果需要限制特定域名的访问,可以将CORS_ORIGIN_ALLOW_ALL设置为False,然后使用CORS_ORIGIN_WHITELIST选项指定允许访问的域名列表

  1. 重启Django服务即可生效。