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對象。所有其它通過的參數和關鍵詞參數被用在過濾查找。


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