带有多个文件的瓶子框架

时间:2012-06-27 14:09:42

标签: python frameworks bottle multiple-files

我已经阅读了瓶文档,但我找不到如何使用多个文件的瓶子的示例。下面是我的方式,它正在工作,但我不确定这是否是正确的方法(我在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. hello1.py

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

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

4 个答案:

答案 0 :(得分: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'


我不确定这是否是最好的方法,但它似乎没有投诉,并且省去了必须具有相互知识的share ports between applications的麻烦。这种方法确实源于设计偏好,但如果有人能够证明AppStack如何用于获得相同的结果,我将不胜感激。

答案 1 :(得分:2)

如果将代码拆分为10个Python模块,那么您将进行10次导入。您可以使用__import__

进行迭代
for i in range(1, 11):
    __import__('hello%d' % i)

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

答案 2 :(得分:1)

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

    {li> //post/:id/tags /,/tag/:tagblog.py, {li> /admin/admin/newpost/admin/editpost/:id中的admin.py
  • 等等。

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

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

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

答案 3 :(得分:0)

不确定最佳方式,但确实 mount() might be used并且看起来对我很好(使用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

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