繁体   English   中英

带有多个文件的瓶子框架

[英]bottle framework with multiple files

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

我想使用一个单瓶服务器来提供一系列微应用程序,并且可以分散关注点,想要做你一直在寻找的东西。

以下是我解决任务的方法:

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如何用于获得相同的结果,我将不胜感激。

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

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

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

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

  • //post/:id/tags /, /tag/:tag blog.py /tag/:tag
  • /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

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

不确定最佳方式,但确实可以使用 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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM