为cors支持添加decorator的sanic扩展。基于科里海豚的烧瓶。

Sanic-Cors的Python项目详细描述


Build StatusLatest VersionSupported Python versionsLicense

处理跨源资源共享(CORS)的SANIC扩展, 使跨源ajax成为可能。基于 flask-cors科里海豚。

这个包有一个简单的原理,当你想启用cors时,你 希望为域上的所有用例启用它。这意味着不要弄脏 默认情况下,使用不同的允许头、方法等, 由于安全原因,已禁用跨域提交cookie 含义,请参阅文档了解如何启用 凭证请求,请确保添加某种 CSRF 在这样做之前保护!

安装

使用pip或easy_install安装扩展。

$ pip install -U sanic-cors

用法

这个包公开了一个sanic扩展,默认情况下,它在 所有路线,所有来源和方法。它允许所有 每个资源级别上的cors头。包中还包含一个decorator, 对于那些喜欢这种方法的人。

简单用法

在最简单的情况下,使用默认值初始化sanic cors扩展 参数,以便允许所有路由上所有域的CORS。

fromsanicimportSanicfromsanic.responseimporttextfromsanic_corsimportCORS,cross_originapp=Sanic(__name__)CORS(app)@app.route("/",methods=['GET','OPTIONS'])defhello_world(request):returntext("Hello, cross-origin-world!")

特定于资源的COR

或者,可以在资源和源上指定CORS选项 通过将字典作为资源选项传递的粒度级别, 将路径映射到一组选项。

app=Sanic(__name__)cors=CORS(app,resources={r"/api/*":{"origins":"*"}})@app.route("/api/v1/users",methods=['GET','OPTIONS'])deflist_users(request):returntext("user example")

通过decorator路由特定的COR

这个扩展还公开了一个简单的decorator来装饰sanic路由。 和。只需在调用sanic的下面添加@cross_origin(app)@app.route(..)允许cors在给定的路由上运行。

@app.route("/",methods=['GET','OPTIONS'])@cross_origin(app)defhello_world(request):returntext("Hello, cross-origin-world!")

SPF使用

sanic cors在幕后使用sanic插件框架。 这意味着您可以使用spf为您加载插件,如果您是 使用多个SPF插件编排和应用程序。

fromsanicimportSanicfromsanic.responseimporttextfromspfimportSanicPluginsFrameworkfromsanic_cors.extensionimportcorsapp=Sanic(__name__)spf=SanicPluginsFramework(app)spf.register_plugin(cors,automatic_options=True)@app.route("/",methods=['GET','OPTIONS'])defhello_world(request):returntext("Hello, cross-origin-world!")

文档

欲了解完整的选项列表,请参阅烧瓶瓶 documentation

飞行前请求

CORS请求必须发送pre-flight requests 通过options方法,sanic默认只允许GET方法,以便 为cors请求提供服务您必须在methods参数中指定OPTIONS以 你的路线设计师。

或者,可以使用automatic_options配置参数 为您自动处理OPTIONS响应。

CORS(app,automatic_options=True)@app.delete('/api/auth')@auth.login_requiredasyncdefauth_logout(request):auth.logout_user(request)returnjson(None,status=OK)

或者使用app config键:

app=Sanic(__name__)app.config['CORS_AUTOMATIC_OPTIONS']=TrueCORS(app)@app.delete('/api/auth')@auth.login_requiredasyncdefauth_logout(request):auth.logout_user(request)returnjson(None,status=OK)

或者直接使用cross_origindecorator:

@app.route('/api/auth',methods={'DELETE','OPTIONS'})@auth.login_required@cross_origin(app,automatic_options=True)asyncdefauth_logout(request):auth.logout_user(request)returnjson(None,status=OK)

注意:对于第三个示例,必须使用@route(),而不是 @delete()因为您需要同时启用DELETEOPTIONS来 尽管decorator正在处理^{tt4},也要处理该路径$ 回应。

故障排除

如果事情没有如您所期望的那样工作,请启用日志记录以帮助理解 引擎盖下面发生了什么,为什么。

logging.getLogger('sanic_cors').level=logging.DEBUG

测试

一组简单的测试包含在test/中。要运行,安装机头, 只需调用nosetestspython setup.py test来执行 测试。

贡献

问题、评论或改进?请在上创建问题 Github。我尽力 尽我所能把所有提议的贡献都包括在内。

学分

这个sanic扩展基于armin编写的Decorator for the HTTP Access Control 罗纳克。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
javagae/JPA/Datastore如何查询无主列表   java从xml中读取未知元素   java如何在控制台上显示MavReplugin单元测试覆盖率报告   java什么被认为是遍历LDAP DIT的正确方法?   Eclipse(Java)在创建了一个新包之后,我无法向其中添加源文件   java new REngine启动并立即停止   java Android:如何从保存在SQLite数据库中的listview中删除项目?   找不到java Gradle DSL方法:“compile()”错误   java使用POI获取具有特定列名的每一行中的值   java解析JSON文件   java中断for循环,返回4个结果,而不是2个   LDAP处理过程中发生java未分类异常;嵌套的异常是javax。命名。NamingException   当表单在基于spring3注释的控制器中验证失败时,java引用数据将丢失   java Android,从web获取数据并更新UI(多线程和MVC设计模式)   用于OS X Yosemite的java优化Swing程序