Flask-MongoEngine Documentation · app.config['MONGODB_PASSWORD']='pwd123' By default...
Transcript of Flask-MongoEngine Documentation · app.config['MONGODB_PASSWORD']='pwd123' By default...
![Page 1: Flask-MongoEngine Documentation · app.config['MONGODB_PASSWORD']='pwd123' By default flask-mongoengine open the connection when extension is instanciated but you can configure](https://reader030.fdocuments.us/reader030/viewer/2022041121/5f361c44e6ca280e2d4501a4/html5/thumbnails/1.jpg)
Flask-MongoEngine DocumentationRelease 0.9.5
Ross Lawley
Feb 16, 2018
![Page 2: Flask-MongoEngine Documentation · app.config['MONGODB_PASSWORD']='pwd123' By default flask-mongoengine open the connection when extension is instanciated but you can configure](https://reader030.fdocuments.us/reader030/viewer/2022041121/5f361c44e6ca280e2d4501a4/html5/thumbnails/2.jpg)
![Page 3: Flask-MongoEngine Documentation · app.config['MONGODB_PASSWORD']='pwd123' By default flask-mongoengine open the connection when extension is instanciated but you can configure](https://reader030.fdocuments.us/reader030/viewer/2022041121/5f361c44e6ca280e2d4501a4/html5/thumbnails/3.jpg)
Contents
1 Installing Flask-MongoEngine 3
2 Configuration 5
3 Custom Queryset 7
4 MongoEngine and WTForms 94.1 Supported fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104.2 Not currently supported field types: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5 Session Interface 11
6 Debug Toolbar Panel 13
7 Upgrading 157.1 0.6 to 0.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
8 Credits 17
i
![Page 4: Flask-MongoEngine Documentation · app.config['MONGODB_PASSWORD']='pwd123' By default flask-mongoengine open the connection when extension is instanciated but you can configure](https://reader030.fdocuments.us/reader030/viewer/2022041121/5f361c44e6ca280e2d4501a4/html5/thumbnails/4.jpg)
ii
![Page 5: Flask-MongoEngine Documentation · app.config['MONGODB_PASSWORD']='pwd123' By default flask-mongoengine open the connection when extension is instanciated but you can configure](https://reader030.fdocuments.us/reader030/viewer/2022041121/5f361c44e6ca280e2d4501a4/html5/thumbnails/5.jpg)
Flask-MongoEngine Documentation, Release 0.9.5
A Flask extension that provides integration with MongoEngine. For more information on MongoEngine please checkout the MongoEngine Documentation.
It handles connection management for your app. You can also use WTForms as model forms for your models.
Contents 1
![Page 6: Flask-MongoEngine Documentation · app.config['MONGODB_PASSWORD']='pwd123' By default flask-mongoengine open the connection when extension is instanciated but you can configure](https://reader030.fdocuments.us/reader030/viewer/2022041121/5f361c44e6ca280e2d4501a4/html5/thumbnails/6.jpg)
Flask-MongoEngine Documentation, Release 0.9.5
2 Contents
![Page 7: Flask-MongoEngine Documentation · app.config['MONGODB_PASSWORD']='pwd123' By default flask-mongoengine open the connection when extension is instanciated but you can configure](https://reader030.fdocuments.us/reader030/viewer/2022041121/5f361c44e6ca280e2d4501a4/html5/thumbnails/7.jpg)
CHAPTER 1
Installing Flask-MongoEngine
Install with pip:
pip install flask-mongoengine
3
![Page 8: Flask-MongoEngine Documentation · app.config['MONGODB_PASSWORD']='pwd123' By default flask-mongoengine open the connection when extension is instanciated but you can configure](https://reader030.fdocuments.us/reader030/viewer/2022041121/5f361c44e6ca280e2d4501a4/html5/thumbnails/8.jpg)
Flask-MongoEngine Documentation, Release 0.9.5
4 Chapter 1. Installing Flask-MongoEngine
![Page 9: Flask-MongoEngine Documentation · app.config['MONGODB_PASSWORD']='pwd123' By default flask-mongoengine open the connection when extension is instanciated but you can configure](https://reader030.fdocuments.us/reader030/viewer/2022041121/5f361c44e6ca280e2d4501a4/html5/thumbnails/9.jpg)
CHAPTER 2
Configuration
Basic setup is easy, just fetch the extension:
from flask import Flaskfrom flask_mongoengine import MongoEngine
app = Flask(__name__)app.config.from_pyfile('the-config.cfg')db = MongoEngine(app)
Or, if you are setting up your database before your app is initialized, as is the case with application factories:
from flask import Flaskfrom flask_mongoengine import MongoEnginedb = MongoEngine()...app = Flask(__name__)app.config.from_pyfile('the-config.cfg')db.init_app(app)
By default, Flask-MongoEngine assumes that the mongod instance is running on localhost on port 27017, and youwish to connect to the database named test.
If MongoDB is running elsewhere, you should provide the host and port settings in the ‘MONGODB_SETTINGS’dictionary wih app.config.:
app.config['MONGODB_SETTINGS'] = {'db': 'project1','host': '192.168.1.35','port': 12345
}
If the database requires authentication, the username and password arguments should be provided ‘MON-GODB_SETTINGS’ dictionary wih app.config.:
5
![Page 10: Flask-MongoEngine Documentation · app.config['MONGODB_PASSWORD']='pwd123' By default flask-mongoengine open the connection when extension is instanciated but you can configure](https://reader030.fdocuments.us/reader030/viewer/2022041121/5f361c44e6ca280e2d4501a4/html5/thumbnails/10.jpg)
Flask-MongoEngine Documentation, Release 0.9.5
app.config['MONGODB_SETTINGS'] = {'db': 'project1','username':'webapp','password':'pwd123'
}
Uri style connections are also supported, just supply the uri as the host in the ‘MONGODB_SETTINGS’ dictionarywith app.config. Note that database name from uri has priority over name.
app.config['MONGODB_SETTINGS'] = {'db': 'project1','host': 'mongodb://localhost/database_name'
}
Connection settings may also be provided individually by prefixing the setting with ‘MONGODB_’ in the app.config.:
app.config['MONGODB_DB'] = 'project1'app.config['MONGODB_HOST'] = '192.168.1.35'app.config['MONGODB_PORT'] = 12345app.config['MONGODB_USERNAME'] = 'webapp'app.config['MONGODB_PASSWORD'] = 'pwd123'
By default flask-mongoengine open the connection when extension is instanciated but you can configure it to openconnection only on first database access by setting the MONGODB_SETTINGS['connect'] parameter or itsMONGODB_CONNECT flat equivalent to False:
app.config['MONGODB_SETTINGS'] = {'host': 'mongodb://localhost/database_name','connect': False,
}# orapp.config['MONGODB_CONNECT'] = False
6 Chapter 2. Configuration
![Page 11: Flask-MongoEngine Documentation · app.config['MONGODB_PASSWORD']='pwd123' By default flask-mongoengine open the connection when extension is instanciated but you can configure](https://reader030.fdocuments.us/reader030/viewer/2022041121/5f361c44e6ca280e2d4501a4/html5/thumbnails/11.jpg)
CHAPTER 3
Custom Queryset
flask-mongoengine attaches the following methods to Mongoengine’s default QuerySet:
• get_or_404: works like .get(), but calls abort(404) if the object DoesNotExist.
• first_or_404: same as above, except for .first().
• paginate: paginates the QuerySet. Takes two arguments, page and per_page.
• paginate_field: paginates a field from one document in the QuerySet. Arguments: field_name, doc_id, page,per_page.
Examples:
# 404 if object doesn't existdef view_todo(todo_id):
todo = Todo.objects.get_or_404(_id=todo_id)..
# Paginate through tododef view_todos(page=1):
paginated_todos = Todo.objects.paginate(page=page, per_page=10)
# Paginate through tags of tododef view_todo_tags(todo_id, page=1):
todo = Todo.objects.get_or_404(_id=todo_id)paginated_tags = todo.paginate_field('tags', page, per_page=10)
Properties of the pagination object include: iter_pages, next, prev, has_next, has_prev, next_num, prev_num.
In the template:
{# Display a page of todos #}<ul>
{% for todo in paginated_todos.items %}<li>{{ todo.title }}</li>
{% endfor %}
(continues on next page)
7
![Page 12: Flask-MongoEngine Documentation · app.config['MONGODB_PASSWORD']='pwd123' By default flask-mongoengine open the connection when extension is instanciated but you can configure](https://reader030.fdocuments.us/reader030/viewer/2022041121/5f361c44e6ca280e2d4501a4/html5/thumbnails/12.jpg)
Flask-MongoEngine Documentation, Release 0.9.5
(continued from previous page)
</ul>
{# Macro for creating navigation links #}{% macro render_navigation(pagination, endpoint) %}
<div class=pagination>{% for page in pagination.iter_pages() %}{% if page %}
{% if page != pagination.page %}<a href="{{ url_for(endpoint, page=page) }}">{{ page }}</a>
{% else %}<strong>{{ page }}</strong>
{% endif %}{% else %}
<span class=ellipsis>...</span>{% endif %}
{% endfor %}</div>
{% endmacro %}
{{ render_navigation(paginated_todos, 'view_todos') }}
8 Chapter 3. Custom Queryset
![Page 13: Flask-MongoEngine Documentation · app.config['MONGODB_PASSWORD']='pwd123' By default flask-mongoengine open the connection when extension is instanciated but you can configure](https://reader030.fdocuments.us/reader030/viewer/2022041121/5f361c44e6ca280e2d4501a4/html5/thumbnails/13.jpg)
CHAPTER 4
MongoEngine and WTForms
flask-mongoengine automatically generates WTForms from MongoEngine models:
from flask_mongoengine.wtf import model_form
class User(db.Document):email = db.StringField(required=True)first_name = db.StringField(max_length=50)last_name = db.StringField(max_length=50)
class Content(db.EmbeddedDocument):text = db.StringField()lang = db.StringField(max_length=3)
class Post(db.Document):title = db.StringField(max_length=120, required=True, validators=[validators.
→˓InputRequired(message=u'Missing title.'),])author = db.ReferenceField(User)tags = db.ListField(db.StringField(max_length=30))content = db.EmbeddedDocumentField(Content)
PostForm = model_form(Post)
def add_post(request):form = PostForm(request.POST)if request.method == 'POST' and form.validate():
# do somethingredirect('done')
return render_template('add_post.html', form=form)
For each MongoEngine field, the most appropriate WTForm field is used. Parameters allow the user to provide hintsif the conversion is not implicit:
PostForm = model_form(Post, field_args={'title': {'textarea': True}})
Supported parameters:
9
![Page 14: Flask-MongoEngine Documentation · app.config['MONGODB_PASSWORD']='pwd123' By default flask-mongoengine open the connection when extension is instanciated but you can configure](https://reader030.fdocuments.us/reader030/viewer/2022041121/5f361c44e6ca280e2d4501a4/html5/thumbnails/14.jpg)
Flask-MongoEngine Documentation, Release 0.9.5
For fields with choices:
• multiple to use a SelectMultipleField
• radio to use a RadioField
For StringField:
• password to use a PasswordField
• textarea to use a TextAreaField
(By default, a StringField is converted into a TextAreaField if and only if it has no max_length.)
4.1 Supported fields
• StringField
• BinaryField
• URLField
• EmailField
• IntField
• FloatField
• DecimalField
• BooleanField
• DateTimeField
• ListField (using wtforms.fields.FieldList )
• SortedListField (duplicate ListField)
• EmbeddedDocumentField (using wtforms.fields.FormField and generating inline Form)
• ReferenceField (using wtforms.fields.SelectFieldBase with options loaded from QuerySet or Document)
• DictField
4.2 Not currently supported field types:
• ObjectIdField
• GeoLocationField
• GenericReferenceField
10 Chapter 4. MongoEngine and WTForms
![Page 15: Flask-MongoEngine Documentation · app.config['MONGODB_PASSWORD']='pwd123' By default flask-mongoengine open the connection when extension is instanciated but you can configure](https://reader030.fdocuments.us/reader030/viewer/2022041121/5f361c44e6ca280e2d4501a4/html5/thumbnails/15.jpg)
CHAPTER 5
Session Interface
To use MongoEngine as your session store simple configure the session interface:
from flask_mongoengine import MongoEngine, MongoEngineSessionInterface
app = Flask(__name__)db = MongoEngine(app)app.session_interface = MongoEngineSessionInterface(db)
11
![Page 16: Flask-MongoEngine Documentation · app.config['MONGODB_PASSWORD']='pwd123' By default flask-mongoengine open the connection when extension is instanciated but you can configure](https://reader030.fdocuments.us/reader030/viewer/2022041121/5f361c44e6ca280e2d4501a4/html5/thumbnails/16.jpg)
Flask-MongoEngine Documentation, Release 0.9.5
12 Chapter 5. Session Interface
![Page 17: Flask-MongoEngine Documentation · app.config['MONGODB_PASSWORD']='pwd123' By default flask-mongoengine open the connection when extension is instanciated but you can configure](https://reader030.fdocuments.us/reader030/viewer/2022041121/5f361c44e6ca280e2d4501a4/html5/thumbnails/17.jpg)
CHAPTER 6
Debug Toolbar Panel
If you use the Flask-DebugToolbar you can add ‘flask_mongoengine.panels.MongoDebugPanel’ to the DE-BUG_TB_PANELS config list and then it will automatically track your queries:
from flask import Flaskfrom flask_debugtoolbar import DebugToolbarExtension
(continues on next page)
13
![Page 18: Flask-MongoEngine Documentation · app.config['MONGODB_PASSWORD']='pwd123' By default flask-mongoengine open the connection when extension is instanciated but you can configure](https://reader030.fdocuments.us/reader030/viewer/2022041121/5f361c44e6ca280e2d4501a4/html5/thumbnails/18.jpg)
Flask-MongoEngine Documentation, Release 0.9.5
(continued from previous page)
app = Flask(__name__)app.config['DEBUG_TB_PANELS'] = ['flask_mongoengine.panels.MongoDebugPanel']db = MongoEngine(app)toolbar = DebugToolbarExtension(app)
14 Chapter 6. Debug Toolbar Panel
![Page 19: Flask-MongoEngine Documentation · app.config['MONGODB_PASSWORD']='pwd123' By default flask-mongoengine open the connection when extension is instanciated but you can configure](https://reader030.fdocuments.us/reader030/viewer/2022041121/5f361c44e6ca280e2d4501a4/html5/thumbnails/19.jpg)
CHAPTER 7
Upgrading
7.1 0.6 to 0.7
ListFieldPagination order of arguments have been changed to be more logical:
# Old orderListFieldPagination(self, queryset, field_name, doc_id, page, per_page, total)
# New orderListFieldPagination(self, queryset, doc_id, field_name, page, per_page, total)
15
![Page 20: Flask-MongoEngine Documentation · app.config['MONGODB_PASSWORD']='pwd123' By default flask-mongoengine open the connection when extension is instanciated but you can configure](https://reader030.fdocuments.us/reader030/viewer/2022041121/5f361c44e6ca280e2d4501a4/html5/thumbnails/20.jpg)
Flask-MongoEngine Documentation, Release 0.9.5
16 Chapter 7. Upgrading
![Page 21: Flask-MongoEngine Documentation · app.config['MONGODB_PASSWORD']='pwd123' By default flask-mongoengine open the connection when extension is instanciated but you can configure](https://reader030.fdocuments.us/reader030/viewer/2022041121/5f361c44e6ca280e2d4501a4/html5/thumbnails/21.jpg)
CHAPTER 8
Credits
Inspired by two repos:
danjac maratfm
17