2012-06-27 21 views
12

He leído la documentación de la botella pero no encuentro el ejemplo de cómo usar la botella con varios archivos. Debajo está la forma en que lo hice y está funcionando, pero no estoy seguro de si esta es la forma correcta de hacerlo (vi merge() y mount() en API, pero no estoy seguro de si están relacionados con esto). Por favor dame los comentarios.marco de botella con varios archivos

  1. all.py (Este es el archivo principal para correr)

    #! /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" 
    

Respuesta

2

Si divide su código en 10 módulos de Python, hará 10 importaciones. Se puede recorrer con __import__:

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

pero esto no me parece que sea una buena idea. ¿Por qué usted necesita 10 módulos con un micro-marco?

+1

Supongo que no debería importar si es un micro-framework. Si estoy creando una API web y tengo 20 tablas en mi base de datos y cada tipo de tabla se correlaciona con un recurso y quiero mantener los manejadores de solicitudes y el ORM asociado para cada tabla en archivos independientes, no es la forma correcta de hacerlo. ¿hazlo? Soy relativamente nuevo tanto para python como para botella, así que corrígeme si me equivoco. – Pankaj

1

¿Por qué le gustaría tener un módulo por vista? Las vistas se agrupan generalmente de alguna manera lógica, por ejemplo .:

  • /, /post/:id, /tags /, /tag/:tag en blog.py,
  • /admin, /admin/newpost, /admin/editpost/:id en admin.py,
  • y así sucesivamente.

También debe leer el capítulo Becoming Big de la documentación del Frasco. Para una aplicación de tamaño medio, es probable que desee para crear un paquete con un diseño similar a esto:

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

para aplicaciones aún más grandes, vistas divididas en un sub-paquete.

9

He querido utilizar un solo servidor de botellas para servir un conjunto de micro-aplicaciones y para una separación de preocupaciones decente, he querido hacer lo que ha estado buscando.

Así es como he resuelto mi tarea:

rootApp.py (El archivo principal)

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 (La nueva aplicación que necesita ser fusionado en la suite)

from bottle import Bottle 

clientApp = Bottle() 

@clientApp.route('/clientApp') 
def clientAppIndex(): 
    return 'Client App HomePage' 


No estoy seguro si esto es la mejor manera de hacerlo, pero parece que funciona sin quejas y ahorra la molestia de tener a share ports between applications que de otra manera podría tener conocimiento mutuo. El enfoque realmente surge de una preferencia de diseño, pero estaría agradecido si alguien pudiera demostrar cómo/si la AppStack podría usarse para obtener el mismo resultado.