6

我正在 Bottle 和 Flask 中构建一个应用程序,看看我更喜欢哪个,因为 Django 包含太多“电池”。

我已经阅读了两者的路由文档,这些文档非常清晰易懂,但我正在努力寻找一种方法来处理未知的、可能无限数量的 URL 段。IE:

http://www.example.com/seg1/seg2/seg3/seg4/seg5.....

我正在考虑使用类似的东西

@app.route(/< path:fullurl >)
使用正则表达式删除不需要的字符并将 fullurl 字符串拆分为长度与段数相同的列表,但这似乎非常低效。

大多数 PHP 框架似乎都有一种构建段变量名称数组的方法,无论数量如何,但 Flask、Bottle 或 Django 似乎都没有类似的选项,我似乎需要指定确切数量的段来捕获变量。几个 PHP cms 似乎立即将前 9 个段收集为变量,并且任何不再作为完整路径传递的内容,然后以我上面提到的方式分解。

我不了解 URL 路由中的工作方式吗?字符串拆分方法真的效率低下还是最好的方法?或者,有没有办法将未知数量的段直接收集到 Flask 中的变量中?

我对 Python 框架很陌生,所以五岁的孩子的解释会有所帮助,

非常感谢。

4

3 回答 3

15

我自己对 Flask 还很陌生,但从我目前的工作来看,我很确定这个想法是你有很多小的路由/视图方法,而不是一个巨大的切换野兽。

例如,如果您有这样的网址:

http://example.com/unit/57/
http://example.com/unit/57/page/23/
http://example.com/unit/57/page/23/edit

你会像这样路由它:

@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):
    ...

这样做有助于在您的应用程序中保留某种结构并依赖框架来路由内容,而不是获取 URL 并自己完成所有路由。然后,您还可以使用蓝图来处理不同的功能。

不过我承认,我很难想到在 URL 中可能需要无限数量的部分的情况?

于 2012-05-28T10:03:47.877 回答
4

拆分字符串不会给您的程序带来任何低效率。就性能而言,它是框架完成的 URL 处理的一个微不足道的补充。它也适合一行代码。

@app.route('/<path:fullurl>')
def my_view(fullurl):
    params = fullurl.split('/')
于 2012-05-28T05:34:39.317 回答
2

有效:</p>

@app.route("/login/<user>/<password>")
def login(user, password):
    app.logger.error('An error occurred')
    app.logger.error(password)
    return "user : %s password : %s" % (user, password)

然后:

http://example.com:5000/login/jack/hi

输出:

user : jack password : hi
于 2013-07-14T12:54:18.473 回答