在烧瓶中创建简单、可嵌套的路径。
flaskrouting的Python项目详细描述
烧瓶路径
在烧瓶里写东西很麻烦。有很多样板文件,而且api限制性很强。flaskrouting
让您可以用尽可能少的代码快速定义站点的路由。
开始
用pip install flaskrouting
flaskrouting
下面是一些简单博客站点的路由:
fromflaskroutingimportvar,page,pathroutes=path("",[page("",HomeView,name="home"),page("blogs",BlogListView),path("blog",[var("<int:blog_id>",[page("",BlogView),page("edit",EditBlogView)])])])# Register the routes with the flask app instanceroutes.register(app)
这将通过使用var
、page
和path
创建4个路由。每个页面的url一次构建一个。因此,相关的url被组合在一起,不需要重复任何代码。
以下是每条路线的反向查找:
url_for("home")=>"/"url_for("blogs")=>"/blogs"url_for("blog",blog_id=12)=>"/blog/12"url_for("blog.edit",blog_id=12)=>"/blog/12/edit"
要注册路由,只需调用register()
,并提供flask应用程序实例。最简单的方法是在单独的文件中定义路由,然后导入它们并在创建应用程序实例时向其注册。
配置
烧瓶路径。尾部斜线
默认值:False
如果TRAILING_SLASHES = False
,则flaskrouting
将不会向url附加尾随斜杠,除非您显式地用斜杠定义它们。若要始终附加尾随斜杠,请在调用register()
方法之前设置flaskrouting.TRAILING_SLASHES = True
。
参考
烧瓶路径。路径(名称,路径)
创建路径定义,并将name
应用于routes
。每个路由定义都必须用path()
包装。要注册路由定义,请对返回的对象调用.register(app)
name
:路径的名称。这在构建url和生成反向查找名称时使用。如果此路径位于根级别,则可以将其设置为""
,在这种情况下,URL或反向查找名称中不使用此路径,而仅用作容器。routes
:包含var
、page
和/或path
对象的列表。如果设置为[]
,则丢弃路径。
flaskrouting.page(url,view,name=none,methods=none,**选项)
在url
处创建页定义,该页定义将请求转发到view
。对于反向查找,默认情况下使用url
,除非设置了name
。如果未设置url
或name
,则反向查找中将省略页的名称。如果要将视图限制为仅服务于特定请求(默认情况下,它接受所有请求),还可以为methods
指定http动词列表。
url
:页面的url。如果设置为""
,则不会向完整url或反向查找名称追加任何内容。view
:视图函数或flask.views.View
的子类。name
(可选):如果设置了此选项,则它将用于反向查找名称,而不是url
。如果页面位于/
,则必须设置此项(否则将没有反向查找名称)。如果url
是""
,则除非设置此项,否则在反向查找中不会使用任何页名。methods
(可选):如果设置了此选项,则视图将只接受使用提供的http谓词发出的请求。如果未设置此选项,则视图接受来自下列任何动词的请求:["GET", "POST", "PUT", "PATCH", "DELETE"]
**options
(可选):由add_url_rule()接受的其他关键字选项。您很可能使用它来传递一个defaults
参数(有关更多信息,请参见flask docs)。
烧瓶路由.var(var,routes,name=none)
在路由中创建新的变量规则。默认情况下,变量定义不包括自身作为路由反向查找的一部分,但是您可以设置name
来覆盖它。
var
:变量定义。这是url的动态部分,将作为参数传递给视图。有关格式化的信息,请参见变量规则的flask docs。routes
:包含var
、page
和/或path
对象的列表name
(可选):如果已设置,则使用name
作为路由反向查找的一部分。
示例
索引页面位于/
使用空白路径和页面名在/
处创建路由。页面必须用name
定义,否则无法对url进行反向查找。
path("",[page("",IndexView,name="index")])
rest api
使用methods
参数指定某个端点应负责的http方法。
path("api",[path("user",[page("",UserAPI,methods=["GET","POST"]),var("<int:user_id>",[page("",UserAPI,methods=["PUT","PATCH","DELETE"])])])])
部分路线定义
根据站点的大小,您可能希望按包或视图文件拆分路由定义。如果您的文件夹结构如下:
api/
__init__.py
blog.py
comment.py
user.py
您可以将视图函数/类导入到__init__.py
,并在其中处理所有路由,或者在blog.py
、comment.py
和user.py
中定义部分路由,然后将它们合并到__init__.py
。
# blog.pyroutes=path("blog",[page("page1",view1),page("page2",view2),])# __init__.pyfrom.blogimportroutesasblog_routesroutes=path("api",[blog_routes])
您可以省略path()
,并将部分路由定义为列表:
# blog.pyroutes=[page("page1",view1),page("page2",view2),]# __init__.pyfrom.blogimportroutesasblog_routesroutes=path("api",[path("blog",blog_routes)])