[英]bottle framework with multiple files
我已经阅读了瓶文档,但是我找不到如何使用Bottle和多个文件的示例。 下面是我的方式,它的工作方式,但我不确定这是否是正确的方法(我在API中看到merge()
和mount()
但不确定它们是否与此相关)。 请给我评论。
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)
hello1.py
#! /usr/bin/python from bottle import route, run @route('/hello1') def hello1(): return "Hello world no.1"
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/:id
在admin.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.