Flask和其他Python框架中的多个URL段

时间:2012-05-28 00:57:43

标签: python frameworks flask

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

我已经阅读了两者的路由文档,这是非常明确和可理解的,但我正在努力寻找一种处理未知的,可能无限数量的URL段的方法。即:

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

我正在使用正则表达式来使用正则表达式来删除不需要的字符,并将fullurl字符串拆分成与段数相同的长度列表,但这看起来非常低效。

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

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

我对Python框架很新,所以一个五岁的解释会有所帮助,

非常感谢。

3 个答案:

答案 0 :(得分:13)

我自己对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中可能无限数量的部分吗?

答案 1 :(得分:4)

拆分字符串不会对程序造成任何低效率。在性能方面,它是框架完成的URL处理的一个微不足道的补充。它也适用于一行代码。

@app.route('/<path:fullurl>')
def my_view(fullurl):
    params = fullurl.split('/')

答案 2 :(得分:1)

它有效:

@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