【问题标题】:bottle framework with multiple files具有多个文件的瓶子框架
【发布时间】:2012-06-28 23:59:48
【问题描述】:

我已经阅读了 Bottle 文档,但我找不到如何将 Bottle 与多个文件一起使用的示例。下面是我的做法,它正在工作,但我不确定这是否是正确的方法(我在 API 中看到了 merge()mount(),但不确定它们是否与此相关)。请把cmets给我。

  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"
    

【问题讨论】:

    标签: python frameworks bottle


    【解决方案1】:

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

    我是这样解决我的任务的:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我想如果它是一个微框架应该没关系。如果我正在创建一个 Web API,并且我在我的数据库中有 20 个表,并且每种表类型都映射到一个资源,并且我想将每个表的请求处理程序和关联的 ORM 保留在独立文件中,那么这不是正确的方法吗?做吗?我对 python 和瓶子都比较陌生,如果我错了,请纠正我。
      【解决方案3】:

      不确定最好的方法,但确实 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

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

      【讨论】:

      【解决方案4】:

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

      • /, /post/:id, /tags/, /tag/:tag in blog.py,
      • /admin, /admin/newpost, /admin/editpost/:id in admin.py,
      • 等等。

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

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

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

      【讨论】:

        猜你喜欢
        • 2020-10-23
        • 1970-01-01
        • 2017-05-08
        • 1970-01-01
        • 2013-02-09
        • 1970-01-01
        • 1970-01-01
        • 2021-12-15
        • 1970-01-01
        相关资源
        最近更新 更多