MongoEngine对Django支持的官方文档翻译

官方文档地址:http://docs.mongoengine.org/django.html

博客地址:http://blog.csdn.net/gugugujiawei

6、Django支持

 

注意:

Mongoengine已更新到支持Django1.5

6.1 连接

    在setting.py文件中,忽略标准的设置,即缺省的设置(除非你想在你的工程中利用ORM模式),同时在某处module调用connect()函数。

 

注意:

如果你并不正在利用另一个数据库后台,你可能需要添加一个虚拟数据库后台到setting.py文件中,譬如:

 

DATABASES = {    'default': {        'ENGINE''django.db.backends.dummy'    }}

 

6.2 认证

 

Mongoengine包含了一个利用mongodbDjango认证后台。User model是一个mongoengine Document,但实现了几乎所有标准Django User model的方法和属性——所以两者是相对兼容的。利用这个后台系统能让你以mongodb的形式存储User但仍然利用很多Django自己的认证架构(例如login_required()修饰器以及authenticate()方法)。为了能利用到mongodb的认证后台,需添加以下代码到setting.py文件中:

 

AUTHENTICATION_BACKENDS = (    'mongoengine.django.auth.MongoEngineBackend',)

 

    利用auth 模块能包含get_user()方法,从而通过user的键返回对应的user对象

 

更新的用法见版本0.1.3

 

6.3 定制的User model

    Django 1.5引进了定制的user models,该model能被作为mongoengine认证后台的替代物。

改设置的主要优点是其他依赖django.contrib.auth的成分和支持新的可交换user model的成分能运用得更好。例如,你能利用cretesuperuser管理命令。

 

Setting.py设置如下

 

INSTALLED_APPS = ( 
       ...  
      'django.contrib.auth',   
      'mongoengine.django.mongo_auth',   
      ... 
     ) 
AUTH_USER_MODEL = 'mongo_auth.MongoUser'

 

   一个额外的MONGOENGINE_USER_DOCUMENT设置能让你改变User类为其他你选择的类

 

MONGOENGINE_USER_DOCUMENT = 'mongoengine.django.auth.User'

 

6.4 缓存

    Django允许不同后台存储系统的缓存利用。Mongoengine提供了一个基于mongodb的缓存后台给Django,该后台允许你利用缓存到你的Django应用中,但仅限于mongodb。为了使mongoengine缓存后台生效,确保你的module设置中有'django.contrib.sessions.middleware.SessionMiddleware'(在MIDDLEWARE_CLASSES),并且有'django.contrib.sessions' (在INSTALLED_APPS). 并且,在settings.py中添加

SESSION_ENGINE = 'mongoengine.django.sessions'
SESSION_SERIALIZER = 'mongoengine.django.sessions.BSONSerializer'


    Django提供缓存cookie,能在SESSION_COOKIE_AGE秒内有效,但不能通过缓存后台删除cookie,因此'mongoengine.django.sessions'支持 mongodb TTL

注意:

SESSION_SERIALIZER只是对于Django1.6是必须的,因为其缺省设置时基于JSON并且不知道怎样转换bson.objectid.ObjectId实例到strings

 

更加新方法见版本0.2.1

 

6.5 存储

 

    由于通过FileField mongoEngine能提供对GridFS的支持,因此利用Django文件存储后台来包装GridFS是十分有用的。这个新的存储模块被称为GridFSStorage。利用它的方法非常类似于缺省的FileSystemStorage

from mongoengine.django.storage 
import GridFSStoragefs = GridFSStorage()filename = fs.save('hello.txt', 'Hello, World!')

 

    除了path()方法,所有的Django存储API方法都被实现了。如果文件名已经存在,下划线和一个数字会被加到文件名上,直到文件名不存在为止。save()函数能返回新的文件名:

>>> fs.exists('hello.txt')

True

>>> fs.open('hello.txt').read()

'Hello, World!'

>>> fs.size('hello.txt')

13

>>> fs.url('hello.txt')

'http://your_media_url/hello.txt'

>>> fs.open('hello.txt').name

'hello.txt'

>>> fs.listdir()

([], [u'hello.txt'])

 

    所有文件会被存起来和在GridFS通过FileDocument被重新获取。当然,也有一种简单的方法访问这些文件,而无需通过GridFS存储后台:

>>> from mongoengine.django.storage import FileDocument

>>> FileDocument.objects()

[<FileDocument: FileDocument object>]

 

更新的内容见版本0.4

 

6.6 快捷手段

Django shortcut get_object_or_404的启发,get_document_or_404()方法返回一个document或者当document不存在的时候,触发一个Http404的错误。

 

from mongoengine.django.shortcuts import get_document_or_404
admin_user = get_document_or_404(User, username='root')


第一个参数为一个Document或者QuerySet对象。所有其它通过的参数和关键词参数在query中被用到:

 

foo_email = get_document_or_404(User.objects.only('email'), username='foo', is_active=True).email

 

注意:

    与get()相似,如果多个对象匹配被找到,多对象返回会抛出错误。

当然也受Django shortcut get_object_or_404的启发,get_list_or_404()方法返回一个包含documents的列表,或者当列表为空时,触发一个Http404的错误:

 

from mongoengine.django.shortcuts import get_list_or_404
active_users = get_list_or_404(User, is_active=True)

    第一个参数为Document或者QuerySet对象。所有其它通过的参数和关键词参数被用在过滤查找。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章