在烧瓶中创建简单、可嵌套的路径。

flaskrouting的Python项目详细描述


Build StatusCoverage StatusPyPI version

烧瓶路径

在烧瓶里写东西很麻烦。有很多样板文件,而且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)

这将通过使用varpagepath创建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:包含varpage和/或path对象的列表。如果设置为[],则丢弃路径。

flaskrouting.page(url,view,name=none,methods=none,**选项)

url处创建页定义,该页定义将请求转发到view。对于反向查找,默认情况下使用url,除非设置了name。如果未设置urlname,则反向查找中将省略页的名称。如果要将视图限制为仅服务于特定请求(默认情况下,它接受所有请求),还可以为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:包含varpage和/或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.pycomment.pyuser.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)])

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

推荐PyPI第三方库


热门话题
java如何拆分字符串(基于各种分隔符),但不保留空格?   解析。Json格式的txt文件和knime中的java   java Spring rest api为什么在rest api调用的响应中更改了数据类型   升华文本3抛出java。lang.ClassNotFoundException,而记事本++不存在   java Android指纹扫描仪在尝试5次后停止工作?   java Android如何设置精确的重复报警?   java如何使用HTTPGET connect为access API输入用户名和密码   java当测试报告显示没有测试失败时,Gradle为什么说“有失败的测试”?   用Gson实现java获取响应   MapReduce程序中函数错误的java不可映射参数   java spring安全性不符合自动代理的条件   java GWT使用异步回调进行同步/阻塞调用   java奇怪的类数组问题无法在jsp中显示   如何在java中使用PrinterJob使用epl打印条形码   java如何在JTable中居中单元格   将Java Mockito测试转换为Kotlin   html Java正则表达式模式匹配到多个相同标记   testCompile中缺少java Gradle(Android)多项目依赖项   在输入提示后输入字符串时发生java FileNotFoundException