简体   繁体   中英

Flask with MongoDB using MongoKit to MongoLabs

I am a beginner and I have a simple application I have developed locally which uses mongodb with mongoKit as follows:

app = Flask(__name__)
app.config.from_object(__name__)

customerDB = MongoKit(app)
customerDB.register([CustomerModel])

then in views I just use the CustomerDB

I have put everything on heroku cloud but my database connection doesn't work.

I got the link I need to connect by:

heroku config | grep MONGOLAB_URI 

but I am not sure how to pull this. I looked at the following post, but I am more confused How can I use the mongolab add-on to Heroku from python?

Any help would be appreciated.

Thanks!

According to the documentation , Flask-MongoKit supports a set of configuration settings.

MONGODB_DATABASE
MONGODB_HOST
MONGODB_PORT
MONGODB_USERNAME
MONGODB_PASSWORD

The MONGOLAB_URI environment setting needs to be parsed to get each of these. We can use this answer to the question you linked to as a starting point.

import os
from urlparse import urlsplit

from flask import Flask
from flask_mongokit import MongoKit

app = Flask(__name__)

# Get the URL from the Heroku setting.
url = os.environ.get('MONGOLAB_URI', 'mongodb://localhost:27017/some_db_name')
# Parse it.
parsed - urlsplit(url)

# The database name comes from the path, minus the leading /.
app.config['MONGODB_DATABASE'] = parsed.path[1:]

if '@' in parsed.netloc:
    # If there are authentication details, split the network locality.
    auth, server = parsed.netloc.split('@')
    # The username and password are in the first part, separated by a :.
    app.config['MONGODB_USERNAME'], app.config['MONGODB_PASSWORD'] = auth.split(':')
else:
    # Otherwise the whole thing is the host and port.
    server = parsed.netloc

# Split whatever version of netloc we have left to get the host and port.
app.config['MONGODB_HOST'], app.config['MONGODB_PORT'] = server.split(':')

customerDB = MongoKit(app)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM