Tôi đang sử dụng Flask với Blueprint để lấy bộ xương cho trang web của mình và tôi đang gặp sự cố khi sử dụng các lớp cấu hình sâu trong ứng dụng của mình.Có thể nhập các giá trị cấu hình bình trong các mô-đun mà không cần nhập khẩu vòng tròn không?
Dưới đây là một số mã giả giải thích làm thế nào tôi đã thiết lập mọi thứ:
websiteconfig.py
class Config(object):
pass
class ProductionConfig(Config):
DEBUG = False
class DevelopmentConfig(Config):
DEBUG = True
website/__ init __.py:
# Some app code and config loading
app = Flask('website')
app.config.from_object('websiteconfig.DevelopmentConfig')
# Import some random blueprint
from website import users
app.register_blueprint(users.api)
# This works:
# print app.config['DEBUG']
trang web/người dùng/__ init __.py:
from flask import Blueprint
from website.users.models import test
api = Blueprint('users', __name__, url_prefix='/users')
# This works:
# print api.config['DEBUG']
# From models
print test()
website/người dùng/models.py:
# How can I reach the config variables here?
def test():
# I want config['DEBUG'] here
Làm thế nào tôi có thể đạt được các biến cấu hình lưu trữ trong lớp tôi tải trong app.py
sâu bên trong gói users
?
Có phải nhập khẩu vòng tròn như from website import app
(bên trong models.py) một giải pháp được chấp nhận không?
Nếu không, có một số giải pháp đơn giản mà tôi đã bỏ lỡ không?
Tôi sẽ chấp nhận câu trả lời này. Nó không chính xác những gì tôi muốn nhưng với một số refactoring nó thực sự làm công việc. Tôi sẽ phải làm việc với app.test_request_context() bên ngoài ứng dụng nhưng yeah, nó sẽ phải làm. Cảm ơn rất nhiều! =) – moodh
@moodh bạn đã kết thúc giải pháp nào? Đây cũng là thứ tôi đang phải vật lộn. – Patrick
@ceolwulf: Tôi đã tạo mô-đun cấu hình có thể sử dụng mà không cần bình cũng vì vậy tôi chỉ cần sử dụng cấu hình nhập khẩu get_config và gọi config = get_config() mỗi lần tôi cần :) – moodh