sanic官方文档解析之路由
1,路由,路由相当于一个网址的地址,来确定网址的位置和唯一性
当http://server.url/被允许访问服务器,当最后的"/"通过路由匹配到了业务逻辑处理的函数,将会返回一个json对象
Sanic处理函数必须被定义使用async def语法,作为异步处理的函数
- 1.1请求参数的处理(Request Parametres)
Sanic框架天生自带一个基本的支持参数的路由
为了特殊的参数,支持引用尖括号来携带参数类似:<PARAM>,请求参数将会被通过路由处理函数作为关键字参数
- 1.2参数的特殊类型
参数的特殊形式在后边增加一个,参数的数据类型(:type)在参数的后边,尖括号的里边,如果参数和数据类型不匹配,Sanic框架会抛出一个NotFound的例子,会在url上显示404: Page not found
这个int和 number有什么区别,未完待续...?
这个[A-z]和[A-z]+和[A-z0-9]{0,4}应该是和正则匹配的规则是一致的,未完待续...?
- 1.3HTTP请求的方式
通常,一个路由定义一个URL将会被可用的仅仅只能为get请求,然而,这个@app.route装饰器接收一组可供选择的参数,请求方法,在列表;写哪一个请求的方法,就会运行哪一个请求的方法.
路由里还有一个可选的host参数(可以是列表或者是一个字符串),严格的提供host或者hosts,如果没有host,将是默认是host.
也有一些快键的路由指定请求的方式,直接定义骑牛的方式,@app.get,@app.post.
- 1.4增加路由的方法
正如我们所见,路由京城被特殊的用作@app.route,装饰器,然而,这样的装饰器已经缺失装饰了app.add_route,被做作为一个追随者.,具体使用如上图
- 1.5,用url_for建立url
Sanic框架提供了一个url_for方法,是基于处理方法名称去生成url,如果你想避免在你的app中编码url的路径,你可以参考以上的处理名字.(对求的参数可以做判断筛选)内部跳转,不用客户端再发一次请求了,类似namespace
一下这几种情况牢记要使用url_for
- 通过url_for没有请求参数的关键字参数将会被包含在查询的url中
- 多个值的参数将会通过url_for来设置路由
- 还有一些特殊的参数(
_anchor
,_external
,_scheme
,_method
,_server
)通过url_for将会有特殊的url建立的方法(_method现在和你支持这样的操作并且将会忽略) - 所有有效的参数必须通过url_for去建立URL,如果没有供给一个参数,或者 参数和数据类型不搭配,将会抛出一个URLBuildError的错误
- 1.6websocket通信路由
Websocket协议的路由能够被@app.websocket装饰(直接在装饰器中,在视图函数中收发消息)
app.add_websocket_route这个方法可以被用作路由的装饰器
用请求的第一个参数处理Websocket路由被调用,并且W二本socket协议对象作为第二个参数,这个Websocket协议对象能够分别的接受和发送数据
- 1.7关于路由斜线的说明
from sanic import Sanic, Blueprint
from sanic.response import text # 实例化一个Sanic对象
# 为所有的提供路由提供斜线的配置
app = Sanic("test_route_strict_slash", strict_slashes=True)
# 你可以为特殊的路由设置斜线 @app.get("/get", strict_slashes=False)
def handler(request):
return text("ok") # 也可以为蓝图设置斜线的配置
bq = Blueprint("test_bq_strict_slash", strict_slashes=True) @bq.get("/bq/get", strict_slashes=False)
def handler(request):
return text("ok") app.blueprint(bq)
- 使用定义的路由的名字
通过有一个name的参数被用来习惯性的设置成路由的名字,与此同时注册侧路由用handler.__name__的属性重写默认的路由的名字
from sanic import Sanic, Blueprint
from sanic.response import text # 实例化一个Sanic对象
app = Sanic("test_named_route") @app.get("/get", name="get_handler") # 给这个路由重命名
def handler(request):
return text("ok") # 你需要使用app.url_for("get_handler")来反向解析这个路由
# 代替app.url_for("handler") # 同样也为蓝图工作
bq = Blueprint("test_named_bq") @bq.get("/bq/get", name="get_handler")
def handler(request):
return text("ok") app.blueprint(bq) # 你需要使用app.url_for("test_named_bq.get_handler)
# 代替app.url_for("handler)
# 不同的名称和不同的方法都能够被用于同一个url中 @app.get("/test", name="route_test")
def handler(request):
return text("ok") @app.post("/test", name="route_test")
def handler2(request):
return text("ok POST") @app.put("/test", name="route_put")
def handler3(request):
return text("ok put") # 在url相同的情况下,你可以使用以上三只中方法中的任何一个
app.url_for("route_test") # 用不同的方法处理在路由重命名一样
# 你需要一个特殊的命名
@app.get("/get")
def handler(request):
return text("ok") @app.post("/post", name="post_handler")
def handler(request):
return text("ok")
- 1.8为静态文件设置url
Sanic支持使用url_for的方法去建立静态文件的url,如果万一静态的文件指向了一个字典,这个url_for会忽略文件的参数
sanic官方文档解析之路由的更多相关文章
- sanic官方文档解析之ssl,debug mode模式和test(测试)
1,ssl 示例: 可选择的SSLContent from sanic import Sanic import ssl context = ssl.create_default_context(pur ...
- sanic官方文档解析之Deploying(部署)和Extension(扩展)
1,Deploying(部署) 通过内置的websocket可以很简单的部署sanic项目,之后通过实例sanic.Sanic,我们可以运行run这个方法通过接下来的关键字参数 host (defau ...
- sanic官方文档解析之Example(一)
1,示例 这部的文档是简单的示例集合,它能够帮助你快速的启动应用大部分的应用,这些应用大多事分类的,并且提供给ini工作的连接代码: 1.1,基础示例 这部分示例集成了提供简单sanic简单的代码 单 ...
- sanic官方文档解析之logging和request Data
1,sanic的logging: Sanic允许有做不同类型的日志(通过的日志,错误的日志),在基于Python3的日志API接口请求,你必须具备基本的Python3的日志知识,在你如果想创建一个新的 ...
- sanic官方文档解析之下载和Configuration
1,sanic框架是做什么的? sanic的官方网址:https://sanic.readthedocs.io/en/latest/ sanic框架是一个类似于flask框架的在Python3.5以上 ...
- sanic官方文档解析之Example(二)
1,通过docker部署sanic项目 通过Docker和Docker Compose部署SANIC应用程序是一项很容易实现的任务,下面的示例提供了示例simple_server.py的部署 FROM ...
- sanic官方文档解析之streaming(流动,滚动)和class_based_views(CBV的写法)
1,streaming(流媒体) 1.1请求流媒体 Sanic允许你通过流媒体携带请求数据,如下,当请求结束await request.stream.read()就会返回None,仅仅只有post请求 ...
- sanic官方文档解析之Custom Protocols(自定义协议)和Socket(网络套接字)
1,Custom Protocol:自定义协议 温馨提示:自定义协议是一个高级用法,大多数的读者不需要用到此功能 通过特殊的自定义协议,你可以改变sanic的协议,自定义协议需要继承子类asyncio ...
- sanic官方文档解析之websocket(网络套接字)和handle decorators(处理程序装饰器)
1,websocket(网络套接字) 在websocket上Sanic提供了一种简单使用的抽象化,来设置websocket(网络套接字) from sanic import Sanic from sa ...
随机推荐
- Ignite集成Spark之IgniteDataFrames
下面简要地回顾一下在第一篇文章中所谈到的内容. Ignite是一个分布式的内存数据库.缓存和处理平台,为事务型.分析型和流式负载而设计,在保证扩展性的前提下提供了内存级的性能. Spark是一个流式数 ...
- Min(BZOJ 1441)
题目描述 给出n个数(A1...An)现求一组整数序列(X1...Xn)使得S=A1*X1+...An*Xn>0,且S的值最小 输入 第一行给出数字N,代表有N个数 下面一行给出N个数 输出 S ...
- NOJ 1111 保险箱的密码 【大红】 [区间dp]
传送门 保险箱的密码 [大红] 时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte总提交 : 118 测 ...
- CSV文件导出2
public void exportCSVFile( HttpServletResponse response, ResultSet rs,String fileName,String headers ...
- golang测试框架--smartystreets/goconvey
视频教程和配套博客:goconvey - 课时 1:优雅的单元测试 Go 语言虽然自带单元测试功能,在 GoConvey 诞生之前也出现了许多第三方辅助库.但没有一个辅助库能够像 GoConvey 这 ...
- CentOS 7.5 安装Docker 教程
Docker简介 Docker是一个开源的容器引擎,它有助于更快地交付应用.Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理. 使用Docker可更快地打包.测试以及部署 ...
- Jetson TK1 二:usb无线网卡的使用
一.总体是按照群里的文档“TK1连接无线网络”的步骤操作的,但也遇到了一些问题,如下: 1.自动配置设备并下载内核源代码到指定的目录下时(估计是解压时),出现时间超前之类的问题,原因是当前本地时间是几 ...
- python两个类之间变量和函数的调用
1.class_a() class_b() 2.class_b使用class_a中的变量和函数 3.变量class_a中:class_a.num=... 函数class_b中:先实例化class_a( ...
- 存code
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> us ...
- [Bzoj5043][Lydsy1709月赛]密码破译(按位dp)
5043: [Lydsy1709月赛]密码破译 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 477 Solved: 125[Submit][Sta ...