Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Django and Mongoengine

Django and Mongoengine

  1. 1. Django and Mongoengine Austin Gross [email_address]
  2. 2. Mongoengine <ul><ul><li>Active on GitHub </li></ul></ul><ul><ul><li>Most popular MongoDB ORM   for Python (so common gotchas are easily googled) </li></ul></ul><ul><ul><li>Django-like &quot;Document&quot; classes </li></ul></ul><ul><ul><li>Integrated with Django API Sessions, Authentication, and Storage </li></ul></ul><ul><ul><li>Can be used without Django </li></ul></ul>
  3. 3. How does it work? <ul><ul><li>Cf. screencast on setting up &quot;Mumblr&quot; at montylounge . Search for &quot;Integrating MongoDB and Django&quot; </li></ul></ul><ul><ul><li>Document schemas defined in a file of your choosing; they inherit from type &quot;Document&quot; </li></ul></ul><ul><ul><ul><li>subclasses will be stored in the same collection </li></ul></ul></ul><ul><ul><li>Call mongoengine.connect(dbname) in </li></ul></ul>
  4. 4. Schemas <ul><ul><li>Support for dynamically-schema'd Documents is in development! </li></ul></ul><ul><ul><li>Otherwise, familiar look and feel </li></ul></ul><ul><ul><li>But no JOINs: for high performance, embedding documents recommended </li></ul></ul><ul><ul><li>Lists of &quot;Embedded Documents&quot; recommended in appropriate cases </li></ul></ul><ul><ul><li>Otherwise, ListField(ReferenceField(target_doc)) </li></ul></ul>
  5. 5. Schemas II <ul><ul><li>But Embeds can't be nested manageably! </li></ul></ul><ul><ul><ul><li>With MongoDB's $ operator, it's impossible to update a single comment embedded in a reply embedded in a thread. At best, retrieve and change  all  comments and set them all at once. </li></ul></ul></ul><ul><ul><li>Embedded Documents in Mongoengine don't work like Django models, even though MongoDB encourages Embeds as an alternative to References. </li></ul></ul><ul><ul><ul><li>No .save() method--in fact, no methods at all; can only be updated by .update_one() on the parent document. </li></ul></ul></ul><ul><ul><li>Still, manageable for one layer </li></ul></ul>
  6. 6. Django Functionality <ul><ul><li>Auth, Sessions, and File serving all fine </li></ul></ul><ul><ul><li>More complicated: </li></ul></ul><ul><ul><ul><li>Caching </li></ul></ul></ul><ul><ul><ul><li>Generic views </li></ul></ul></ul><ul><ul><ul><li>Testing </li></ul></ul></ul><ul><ul><ul><li>ModelForms </li></ul></ul></ul>
  7. 7. Caching <ul><ul><li>Try django-mongodb-cache? </li></ul></ul><ul><ul><li>(I haven't) </li></ul></ul>
  8. 8. Testing <ul><li>Before unit tests, call: </li></ul><ul><li>mongoengine.connect('unit-tests') </li></ul><ul><li>...That's it! Import your models and testing works as expected on test database 'unit-tests' </li></ul>
  9. 9. ModelForms: a lot of work <ul><ul><li>Might be more complicated. A GitHub project exists: &quot;django-mongoforms&quot; </li></ul></ul><ul><ul><li>It's buggy and the last commit was in March </li></ul></ul><ul><ul><li>ReferenceField supported </li></ul></ul><ul><ul><li>No MultipleReferenceField! </li></ul></ul><ul><ul><li>No custom widgets </li></ul></ul><ul><ul><li>Workable, but takes work </li></ul></ul><ul><ul><li>Would be pretty complicated for any model we store as an Embedded Document </li></ul></ul>
  10. 10. Generic views: easily adapted <ul><li>For example, in django.views.generic.create_update: </li></ul><ul><ul><li>document._meta.app_label doesn't exist automatically, but can be added </li></ul></ul><ul><ul><li>same for document._meta.verbose_name ... or remove that from the view. </li></ul></ul><ul><ul><li>You'll have to incorporate the mongoengine-compatible version of ModelForms, since create_update  otherwise will try to use Django's ModelForm </li></ul></ul>
  11. 11. Bells and Whistles <ul><ul><li>Registration forms, etc. </li></ul></ul><ul><ul><li>Things like Ajax-based autocomplete are available for Django, not yet for mongoengine </li></ul></ul>
  12. 12. GitHub links <ul><ul><li>Mongoengine. </li></ul></ul><ul><ul><li>Try Django-mumblr for a working mongoengine application </li></ul></ul><ul><ul><li>Django-mongoforms. Some branches might be more useful than the original, so cf. the network. </li></ul></ul>

    Be the first to comment

    Login to see the comments

  • tuanna92

    Jan. 20, 2013
  • guangmingdong

    May. 12, 2016
  • bluehopper94

    Jul. 10, 2018
  • hosseinj

    May. 29, 2019


Total views


On Slideshare


From embeds


Number of embeds