2012-07-08 78 views
6

Trong ứng dụng Flask của tôi, tôi hy vọng sẽ sử dụng trực tiếp pymongo. Nhưng tôi không chắc chắn cách tốt nhất để tạo kết nối pymongo cho mỗi yêu cầu là gì và làm thế nào để lấy lại tài nguyên kết nối.cách tạo kết nối pymongo theo yêu cầu trong Flask

Tôi biết Kết nối trong pymongo là an toàn chỉ và có tích hợp sẵn. Tôi đoán tôi cần phải tạo một cá thể kết nối toàn cầu, và sử dụng before_request để đặt nó vào bình g.

Trong app.py:

from pymongo import Connection 
from admin.views import admin 
connection = Connection() 
db = connection['test'] 

@app.before_request 
def before_request(): 
    g.db = db 

@app.teardown_request 
def teardown_request(exception): 
    if hasattr(g, 'db'): 
     # FIX 
     pass 

Trong admin/views.py:

from flask import g 
@admin.route('/') 
def index(): 
    # do something with g.db 

Nó thực sự hoạt động. Vì vậy, câu hỏi là:

  1. Đây có phải là cách tốt nhất để sử dụng Kết nối trong bình?

  2. Tôi có cần xác nhận lại tài nguyên một cách rõ ràng trong teardown_request và cách thực hiện không?

Trả lời

7

Tôi vẫn nghĩ đây là một câu hỏi thú vị, nhưng tại sao không trả lời ... Vì vậy, đây là cập nhật của tôi.

Đối với câu hỏi đầu tiên, tôi nghĩ sử dụng current_app sẽ rõ ràng hơn trong Flask.

Trong app.py

app = Flask(__name__) 
connection = Connection() 
db = connection['test'] 
app.db = db 

Trong view.py

from Flask import current_app 
db = current_app.db 
# do anything with db 

Và bằng cách sử dụng CURRENT_APP, bạn có thể sử dụng nhà máy ứng dụng để tạo ra nhiều hơn một ứng dụng như http://flask.pocoo.org/docs/patterns/appfactories/

Và cho câu hỏi thứ hai, tôi vẫn đang tìm ra nó.

0

Tôi nghĩ những gì bạn thể hiện là ok. Bình là gần như quá linh hoạt trong cách bạn có thể tổ chức mọi thứ, không phải luôn luôn trình bày một cách rõ ràng và đúng. Bạn có thể sử dụng các flask-pymongo extension mà thêm một vài tiện nghi nhỏ. Theo hiểu biết của tôi, bạn không phải làm bất cứ điều gì với kết nối theo yêu cầu teardown.

2

Dưới đây là ví dụ của việc sử dụng phần mở rộng bình-pymnongo:

Ví dụ:

uri MongoDB của bạn (cho đến khi tên db) trong app.config như dưới đây

app.config['MONGO_URI'] = 'mongodb://192.168.1.1:27017/your_db_name' 
mongo = PyMongo(app, config_prefix='MONGO') 

và sau đó theo phương pháp api của bạn nơi bạn cần db làm như sau:

db = mongo.db 

Bây giờ bạn có thể làm việc trên db này kết nối và nhận dữ liệu của bạn:

users_count = db.users.count() 
Các vấn đề liên quan