2012-06-27 20 views
12

Tôi đã đọc Tài liệu về chai nhưng tôi không thể tìm thấy ví dụ về cách sử dụng Chai với nhiều tệp. Dưới đây là cách tôi đã làm và nó làm việc nhưng tôi không chắc chắn cho dù đây là cách thích hợp để đi (tôi thấy merge()mount() trong API nhưng không chắc chắn nếu họ có liên quan đến điều này). Xin vui lòng cho tôi những bình luận.khung chai với nhiều tệp

  1. all.py (Đây là tập tin chính dùng để chạy)

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

Trả lời

2

Nếu bạn chia mã của mình thành 10 mô-đun Python, bạn sẽ thực hiện 10 lần nhập. Bạn có thể lặp lại với __import__:

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

nhưng điều này không làm tôi nghĩ là tốt. Tại sao bạn cần cần 10 mô-đun có khung vi mô?

+1

Tôi đoán nó không nên quan trọng nếu một khung vi mô của nó. Nếu tôi đang tạo một API web và tôi đã nói 20 bảng trong DB của tôi và mỗi loại bảng bản đồ cho một tài nguyên và tôi muốn giữ các trình xử lý yêu cầu và ORM liên quan cho mỗi bảng trong các tệp độc lập, sẽ không đúng cách làm đi? Tôi tương đối mới đối với cả trăn và chai nên sửa tôi nếu tôi sai. – Pankaj

1

Tại sao bạn muốn có một mô-đun cho mỗi lượt xem? Những quan điểm thường được nhóm lại trong một số cách hợp lý, ví dụ .:

  • /, /post/:id, /tags /, /tag/:tag trong blog.py,
  • /admin, /admin/newpost, /admin/editpost/:id trong admin.py,
  • và vân vân.

Bạn cũng nên đọc chương Becoming Big từ tài liệu Flask. Đối với một ứng dụng có kích thước trung bình, có thể bạn sẽ muốn tạo một gói có bố cục tương tự như sau:

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

Cho các ứng dụng lớn hơn, chia tách thành một gói phụ.

9

Tôi muốn sử dụng một máy chủ chai duy nhất để phục vụ một bộ các ứng dụng vi mô và để tách biệt các mối quan tâm, đã muốn làm những gì bạn đang tìm kiếm.

Đây là cách tôi giải quyết công việc của tôi:

rootApp.py (file chính của bạn)

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 (Ứng dụng mới cần phải được sáp nhập vào bộ ứng dụng)

from bottle import Bottle 

clientApp = Bottle() 

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


Tôi không chắc chắn nếu điều này là cách tốt nhất để làm điều đó, nhưng có vẻ như để làm việc mà không khiếu nại và tiết kiệm những rắc rối của việc có đến share ports between applications có thể có kiến ​​thức lẫn nhau. Cách tiếp cận thực sự xuất phát từ một thiết kế ưu tiên nhưng tôi sẽ biết ơn nếu ai đó có thể chứng minh làm thế nào/nếu AppStack có thể được sử dụng để có được kết quả tương tự.