15

我已经阅读了瓶子文档,但我找不到如何将瓶子与多个文件一起使用的示例。以下是我所做的方式并且它正在工作,但我不确定这是否是正确的方式(我在 API 中看到过merge()mount()但不确定它们是否与此相关)。请给我意见。

  1. all.py(这是运行的主文件)

    #! /usr/bin/python
    from bottle import route, run
    
    import hello1
    import hello2    # if I have 10 files, it will be 10 imports
    
    run(host='localhost', port=8080, debug=True)
    
  2. 你好1.py

    #! /usr/bin/python
    from bottle import route, run
    
    @route('/hello1')
    def hello1():
        return "Hello world no.1"
    
  3. 你好2.py

    #! /usr/bin/python
    from bottle import route, run
    
    @route('/hello2')
    def hello2():
        return "Hello world no.2"
    
4

4 回答 4

12

我想使用一个单一的瓶服务器来服务于一套微应用程序,并且为了实现良好的关注点分离,我想做你一直在寻找的事情。

这是我解决任务的方法:

rootApp.py(您的主文件)

from bottle import Bottle
from clientApp import clientApp

rootApp = Bottle()
@rootApp.route('/')
def rootIndex():
    return 'Application Suite Home Page'

if __name__ == '__main__':
    rootApp.merge(clientApp)
    rootApp.run(debug=True)



clientApp.py(需要合并到套件中的新应用)

from bottle import Bottle

clientApp = Bottle()

@clientApp.route('/clientApp')
def clientAppIndex():
    return 'Client App HomePage'


我不确定这是否是最好的方法,但它似乎可以毫无怨言地工作,并且省去了必须在本来可以相互了解的应用程序之间共享端口的麻烦。该方法确实源于设计偏好,但如果有人可以演示如何/是否可以使用 AppStack 来获得相同的结果,我将不胜感激。

于 2014-01-08T21:18:06.370 回答
2

如果您将代码拆分为 10 个 Python 模块,您将执行 10 次导入。您可以迭代__import__

for i in range(1, 11):
    __import__('hello%d' % i)

但这并不是一个好主意。为什么需要10 个带有微框架的模块?

于 2012-06-27T14:41:37.007 回答
2

不确定最好的方法,但确实可以使用mount() 并且对我来说看起来不错(使用 python 3.6 + Bottle 0.12.13 测试)。

首先,在文件中构建您的“子应用程序”之一app1.py

from bottle import Bottle

server1 = Bottle()
@server1.route('/')
def root():
    return 'Hello from sub app 1'

然后你在你的主应用程序中使用它:

from bottle import Bottle
from app1 import server1 

mainApp = Bottle()


if __name__ == "__main__":
    mainApp.mount('/appli1', server1)
    mainApp.run()

我们走吧:

点击你的服务器地址:http://myServer/appli1

如果您需要一个功能齐全的示例,请告诉我。

于 2018-05-29T15:22:47.597 回答
1

为什么您希望每个视图有一个模块?视图通常以某种逻辑方式分组,例如:

  • /, /post/:id, /tags/,/tag/:tagblog.py,
  • /admin, /admin/newpost,/admin/editpost/:idadmin.py,
  • 等等。

您还应该阅读Flask 文档中的Becoming Big一章。对于中型应用程序,您可能希望创建一个布局类似于以下内容的包:

/yourapplication
    /runserver.py
    /yourapplication
        /__init__.py
        /views.py
        /static
            /style.css
        /templates
            layout.html
            index.html
            login.html

对于更大的应用程序,将视图拆分为子包。

于 2012-07-03T17:52:13.090 回答