Подтвердить что ты не робот

Флакон с несколькими файлами

Я прочитал документацию о бутылках, но не могу найти пример использования бутылки с несколькими файлами. Ниже приводится способ, которым я это сделал, и он работает, но я не уверен, что это правильный путь (я видел merge() и mount() в API, но не уверен, связаны ли они с этим). Пожалуйста, дайте мне комментарии.

  • 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"
    
4b9b3361

Ответ 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'


Я не уверен, что это лучший способ сделать это, но, похоже, он работает без жалоб и избавляет от необходимости использовать общие порты между приложениями, которые в противном случае могли бы иметь взаимное знание. Этот подход действительно проистекает из предпочтений дизайна, но я был бы признателен, если бы кто-то продемонстрировал, как/если AppStack можно использовать для получения того же результата.

Ответ 2

Если вы разделите свой код на 10 модулей Python, вы сделаете 10 импортных операций. Вы можете выполнять итерацию с помощью __import__:

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

но это не кажется мне хорошей идеей. Зачем вам нужны 10 модулей с микро-каркасом?

Ответ 3

Почему вы хотите иметь один модуль для каждого представления? Представления обычно группируются логически, например:

  • /, /post/:id, /tags/, /tag/:tag в blog.py,
  • /admin, /admin/newpost, /admin/editpost/:id в admin.py,
  • и т.д.

Вы также должны прочитать главу Стать большим из документации Flask. Для приложения среднего размера вы, вероятно, захотите создать пакет с макетом, подобным этому:

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

Для более крупных приложений разделите виды на подпакет.