我正在Bottle和Flask中构建一个应用程序,看看哪个更适合我,因为Django太多'电池包含'。
我已经阅读了两者的路由文档,这是非常明确和可理解的,但我正在努力寻找一种处理未知的,可能无限数量的URL段的方法。即:
http://www.example.com/seg1/seg2/seg3/seg4/seg5.....
我正在使用正则表达式来使用正则表达式来删除不需要的字符,并将fullurl字符串拆分成与段数相同的长度列表,但这看起来非常低效。
大多数PHP框架似乎都有一个构建段变量名称数组的方法,无论数字如何,但Flask,Bottle或Django似乎都没有相似的选项,我似乎需要指定一个确切的段数来捕获变量。几个PHP cms似乎立即收集前9个段作为变量,任何更长的东西都作为完整路径传递,然后以我上面提到的方式分解。
我不理解URL路由中的工作方式吗?字符串拆分方法真的效率低下还是最好的方法呢?或者,有没有办法在Flask中直接收集未知数量的段?
我对Python框架很新,所以一个五岁的解释会有所帮助,
非常感谢。答案 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