我已经阅读了瓶文档,但我找不到如何使用多个文件的瓶子的示例。下面是我的方式,它正在工作,但我不确定这是否是正确的方法(我在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"
答案 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)
为什么您希望每个视图都有一个模块?视图通常以某种逻辑方式分组,例如:
/
,/post/:id
,/tags
/,/tag/:tag
,blog.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
如果您需要一个功能齐全的示例,请告诉我。