Python Flask大刀解决跨域问题-Python教程

资源魔 39 0

python视频教程栏目为各人引见Python Flask处理跨域成绩。

系列文章目次

Table of Contents

  • 系列文章目次
  • 媒介
  • 应用步骤
    • 1. 引入库
    • 2. 设置装备摆设
      • 1. 应用 CORS函数 设置装备摆设全局路由
      • 2. 应用 @cross_origin 来设置装备摆设单行路由
    • 设置装备摆设参数阐明
  • 总结
  • 参考

媒介

我靠,又跨域了

应用步骤

1. 引入库

pip install flask-cors复制代码

2. 设置装备摆设

flask-cors 有两种用法,一种为全局应用,一种对指定的路由应用

1. 应用 CORS函数 设置装备摆设全局路由

from flask import Flask, requestfrom flask_cors import CORS

app = Flask(__name__)
CORS(app, supports_credentials=True)复制代码

此中 CORS 提供了一些参数协助咱们定制一下操作。

罕用的咱们能够设置装备摆设 originsmethodsallow_headerssupports_credentials

一切的设置装备摆设项以下:

:param resources:
    The series of regular expression and (optionally) associated CORS
    options to be applied to the given resource path.

    If the argument is a dictionary, it's keys must be regular expressions,
    and the values must be a dictionary of kwargs, identical to the kwargs
    of this function.

    If the argument is a list, it is expected to be a list of regular
    expressions, for which the app-wide configured options are applied.

    If the argument is a string, it is expected to be a regular expression
    for which the app-wide configured options are applied.

    Default : Match all and apply app-level configuration

:type resources: dict, iterable or string

:param origins:
    The origin, or list of origins to allow requests from.
    The origin(s) may be regular expressions, case-sensitive strings,
    or else an asterisk

    Default : '*'
:type origins: list, string or regex

:param methods:
    The method or list of methods which the allowed origins are allowed to
    access for non-simple requests.

    Default : [GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE]
:type methods: list or string

:param expose_headers:
    The header or list which are safe to expose to the API of a CORS API
    specification.

    Default : None
:type expose_headers: list or string

:param allow_headers:
    The header or list of header field names which can be used when this
    resource is accessed by allowed origins. The header(s) may be regular
    expressions, case-sensitive strings, or else an asterisk.

    Default : '*', allow all headers
:type allow_headers: list, string or regex

:param supports_credentials:
    Allows users to make authenticated requests. If true, injects the
    `Access-Control-Allow-Credentials` header in responses. This allows
    cookies and credentials to be submitted across domains.

    :note: This option cannot be used in conjuction with a '*' origin

    Default : False
:type supports_credentials: bool

:param max_age:
    The maximum time for which this CORS request maybe cached. This value
    is set as the `Access-Control-Max-Age` header.

    Default : None
:type max_age: timedelta, integer, string or None

:param send_wildcard: If True, and the origins parameter is `*`, a wildcard
    `Access-Control-Allow-Origin` header is sent, rather than the
    request's `Origin` header.

    Default : False
:type send_wildcard: bool

:param vary_header:
    If True, the header Vary: Origin will be returned as per the W3
    implementation guidelines.

    Setting this header when the `Access-Control-Allow-Origin` is
    dynamically generated (e.g. when there is more than one allowed
    origin, and an Origin than '*' is returned) informs CDNs and other
    caches that the CORS headers are dynamic, and cannot be cached.

    If False, the Vary header will never be injected or altered.

    Default : True
:type vary_header: bool复制代码

2. 应用 @cross_origin 来设置装备摆设单行路由

from flask import Flask, requestfrom flask_cors import cross_origin

app = Flask(__name__)@app.route('/')@cross_origin(supports_credentials=True)def hello():
    name = request.args.get("name", "World")    return f'Hello, {name}!'复制代码

此中 cross_origin 以及 CORS 提供一些根本相反的参数。

罕用的咱们能够设置装备摆设 originsmethodsallow_headerssupports_credentials

一切的设置装备摆设项以下:

:param origins:
    The origin, or list of origins to allow requests from.
    The origin(s) may be regular expressions, case-sensitive strings,
    or else an asterisk

    Default : '*'
:type origins: list, string or regex

:param methods:
    The method or list of methods which the allowed origins are allowed to
    access for non-simple requests.

    Default : [GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE]
:type methods: list or string

:param expose_headers:
    The header or list which are safe to expose to the API of a CORS API
    specification.

    Default : None
:type expose_headers: list or string

:param allow_headers:
    The header or list of header field names which can be used when this
    resource is accessed by allowed origins. The header(s) may be regular
    expressions, case-sensitive strings, or else an asterisk.

    Default : '*', allow all headers
:type allow_headers: list, string or regex

:param supports_credentials:
    Allows users to make authenticated requests. If true, injects the
    `Access-Control-Allow-Credentials` header in responses. This allows
    cookies and credentials to be submitted across domains.

    :note: This option cannot be used in conjuction with a '*' origin

    Default : False
:type supports_credentials: bool

:param max_age:
    The maximum time for which this CORS request maybe cached. This value
    is set as the `Access-Control-Max-Age` header.

    Default : None
:type max_age: timedelta, integer, string or None

:param send_wildcard: If True, and the origins parameter is `*`, a wildcard
    `Access-Control-Allow-Origin` header is sent, rather than the
    request's `Origin` header.

    Default : False
:type send_wildcard: bool

:param vary_header:
    If True, the header Vary: Origin will be returned as per the W3
    implementation guidelines.

    Setting this header when the `Access-Control-Allow-Origin` is
    dynamically generated (e.g. when there is more than one allowed
    origin, and an Origin than '*' is returned) informs CDNs and other
    caches that the CORS headers are dynamic, and cannot be cached.

    If False, the Vary header will never be injected or altered.

    Default : True
:type vary_header: bool

:param automatic_options:
    Only applies to the `cross_origin` decorator. If True, Flask-CORS will
    override Flask's default OPTIONS handling to return CORS headers for
    OPTIONS requests.

    Default : True
:type automatic_options: bool复制代码

设置装备摆设参数阐明

参数类型Head默许阐明
resources字典、迭代器或字符串全副设置装备摆设容许跨域的路由接口
origins列表、字符串或正则表白式Access-Control-Allow-Origin*设置装备摆设容许跨域拜访的源
methods列表、字符串Access-Control-Allow-Methods[GET, HEAD, POST, OPTIONS, PUT, PATCH, DELETE]设置装备摆设跨域支持的申请形式
expose_headers列表、字符串Access-Control-Expose-HeadersNone自界说申请呼应的Head信息
allow_headers列表、字符串或正则表白式Access-Control-Request-Headers*设置装备摆设容许跨域的申请头
supports_credentials布尔值Access-Control-Allow-CredentialsFalse能否容许申请发送cookie
max_agetimedelta、整数、字符串Access-Control-Max-AgeNone预检申请的无效时长

总结

正在 flask 的跨域设置装备摆设中,咱们能够应用 flask-cors 来进行设置装备摆设,此中 CORS 函数 用来做全局的设置装备摆设, @cross_origin 来完成特定路由的设置装备摆设。

更多相干收费学习保举:python视频教程

以上就是Python Flask年夜刀处理跨域成绩的具体内容,更多请存眷资源魔其它相干文章!

标签: Python python教程 python编程 python使用问题 Flask跨域

抱歉,评论功能暂时关闭!