我正在Bottle和Flask中构建一个应用程序,看看我更舒服,因为Django太多'电池包含'.
我已经阅读了两者的路由文档,这是非常清楚和可理解的,但我正在努力寻找一种处理未知的,可能无限数量的URL段的方法.即:
http://www.example.com/seg1/seg2/seg3/seg4/seg5.....
我正在寻找使用类似的东西
@app.route(/< path:fullurl >)Run Code Online (Sandbox Code Playgroud) 使用正则表达式删除不需要的字符并将fullurl字符串拆分成与段数相同的列表,但这看起来非常低效.
大多数PHP框架似乎都有一种构建段变量名称数组的方法,无论数量如何,但Flask,Bottle或Django似乎都没有类似的选项,我似乎需要指定一个确切数量的段来捕获变量.几个PHP cms似乎立即收集前9个段作为变量,任何更长的东西都作为完整路径传递,然后以我上面提到的方式分解.
我不理解URL路由中的工作方式吗?字符串拆分方法真的效率低下还是最好的方法呢?或者,有没有办法在Flask中直接收集未知数量的段?
我对Python框架很新,所以一个五岁的解释会有所帮助,
非常感谢.
Mal*_*ats 13
我自己对Flask很新,但是从我迄今为止的工作开始,我很确定你的想法是你有很多小的路径/视图方法,而不是一个巨大的切换野兽.
例如,如果你有这样的网址:
http://example.com/unit/57/
http://example.com/unit/57/page/23/
http://example.com/unit/57/page/23/edit
Run Code Online (Sandbox Code Playgroud)
你会像这样路由它:
@app.route('/unit/<int:unit_number>/')
def display_unit(unit_number):
...
@app.route('/unit/<int:unit_number>/page/<int:page_number>/')
def display_page(unit_number, page_number):
...
@app.route('/unit/<int:unit_number>/page/<int:page_number>/edit')
def page_editor(unit_number, page_number):
...
Run Code Online (Sandbox Code Playgroud)
这样做有助于在应用程序中保留某种结构,并依赖于框架来路由东西,而不是抓取URL并自己完成所有路由.然后,您还可以使用蓝图来处理不同的功能.
不过我会承认,我很难想到你需要URL中可能无限数量的部分吗?
拆分字符串不会给您的程序带来任何低效。在性能方面,它对框架完成的 URL 处理来说是一个微不足道的补充。它也适合在一行代码中。
@app.route('/<path:fullurl>')
def my_view(fullurl):
params = fullurl.split('/')
Run Code Online (Sandbox Code Playgroud)