1. 程式人生 > >如何在Django中使用mongodb資料庫?

如何在Django中使用mongodb資料庫?

說在前面的話

在Django的官方文件中,沒有介紹mongodb資料庫的任何使用方法,mongodb也不是django官方推薦使用的資料庫。以下是django官方列出的內建資料庫。官方地址:
django settings database

The database backend to use. The built-in database backends are:

'django.db.backends.postgresql'
'django.db.backends.mysql'
'django.db.backends.sqlite3'
'django.db.backends.oracle'

而且在django中配置mongodb時會遇到很多問題,網上有好幾種配置mongodb的方式,但真正配置的時候還是會遇到很多問題,而且也很不詳細,博主在這個過程中被折磨的確實很慘,後來歷經萬難,總算成功配置好mongodb的資料庫,但坑爹的是django居然沒有支援mongodb的admin管理模組,當然這肯定沒法忍,對不對?所以博主又開始折騰,終於後來發現了一個叫做
django-mongonaut==0.2.20的包。他是在Django和mongodb內省的介面包. 他重寫了django的admin模組,但僅限於mongodb的使用。具體可參照官方文件:
django-mongonaut

另外,在本文中我指定了各個模組的安裝版本,希望大家能夠按照本文的版本依次安裝,不然可能會出現很多問題,因為各個包之間的相互支援的版本不盡相同。如果版本不對應,可能會導致配置失敗。當然,對於版本問題感興趣的也可以自己閱讀相關文件。mongoengine的官方文件:mongoengine
mongoengine的更新說明:mongoengine更新說明
本文中mongoengine安裝0.9.0 是因為在下一版本中將mongoengine對django的支援獨立出來,變成了一個新的模組django-mongoengine
也就是說0.9.0以後的mongoengine不支援django使用。
ok,接下來進入正題。

1.安裝mongodb

windows system

windows使用者直接在官網下載安裝即可,下載地址:mongodb download
關於mongodb的使用,推薦去看mongodb教程

Linux system
# 新增ubuntu軟體倉庫的認證。
1.sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
# 新增mongodb軟體源    
2.echo "deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/3.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list  
# 更新源
3.sudo apt-get update 
# 安裝mongodb資料庫
4.sudo apt-get install -y mongod 

2.配置環境

本文推薦用virtualenv建立虛擬環境來管理開發環境,因為這樣你可以讓自己的開發環境變的乾淨,整潔。virtualenv的官方文件virtualenv
關於virtualenv簡單的使用請看過來。

windows system
開啟doc輸入視窗:

1.安裝virtualenv
pip install virtualenv
virtualenv --version         #檢視virtualenv版本
2.在環境目錄安裝開發環境
3.cd 工作目錄
4.virtualenv  --python=python2.7  [VENV name] #
5.啟用虛擬環境
[VENV name]\Scripts\bin\activate
6.安裝其他的依賴包
pip install django==1.6.2
pip install pymongo==2.8
pip install mongoengine==0.9.0
pip install django-mongonaut


Linux system
開啟Linux終端

1.安裝virtualenv
pip install virtualenv
virtualenv --version         #檢視virtualenv版本
2.在環境目錄安裝開發環境
3.cd 工作目錄
4.virtualenv  --python=python2.7  [VENV name] #
5.啟用虛擬環境
source [VENV name]\bin\activate
6.安裝其他的依賴包
pip install django==1.6.2
pip install pymongo==2.8
pip install mongoengine==0.9.0
pip install django-mongonaut

3.建立django專案

此步驟,大家可以參考django的用法,後面我會根據此文件建立專案並放到github上,感興趣的可以關注。

4.在專案中修改配置

settings中修改配置

在settings中新增以下標記欄位
    INSTALLED_APPS = (   
        'mongonaut',          #新增此欄位
        'django.contrib.admin', 
        'django.contrib.auth''mongoengine.django.mongo_auth', #新增此欄位
        'django.contrib.contenttypes',  
        'django.contrib.sessions',  
        'django.contrib.messages',  
        'django.contrib.staticfiles',  
        'blogapp',  
)
### 新增以下欄位###
    from mongoengine import * 
    DBNAME = 'blog’
    AUTHENTICATION_BACKENDS = (  
        'mongoengine.django.auth.MongoEngineBackend',  
    )  
    SESSION_ENGINE = 'mongoengine.django.sessions'  
    ### 資料庫做以下配置 ###
    DATABASES = { 
        'default': { 
            'ENGINE':'django.db.backends.sqlite3', 
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 
            'USER': '', 
            'PASSWORD': '', 
            'HOST': '', 
            'PORT': '', 
        } 
    }

    AUTH_USER_MODE= 'mongo_auth.MongoUser'  

urls中修改配置

### urls.py 中需要新增的欄位 ###

    from django.conf.urls import patterns, include, url 
    import mongonaut 
    from mongonaut import urls 
    from django.contrib import admin 
    from blogapp.views import * 
    admin.autodiscover() 

    urlpatterns = patterns('', 
        # Example 
        url(r'^mongonaut/', include('mongonaut.urls')),
        url(r'^admin/', include(admin.site.urls)),   

models中配置

###models.py需要引入的模組###
    from django.db import models 
    from mongoengine import *  
    from blog.settings import DBNAME 
    connect(DBNAME)  
    class Employee(Document): 
        name = StringField(max_length=50)
        age = IntField(required=False)  

新建mongoadmin.py的檔案

###新建一個mongoadmin.py的檔案###
    # import the MongoAdmin base class
    from mongonaut.sites import MongoAdmin
    ###import your custom models###
    from blogapp.models import Employee
    # instantiate the MongoAdmin class
    # Then attach the mongoadmin to your model
    Employee.mongoadmin = MongoAdmin()
接下來執行syncdb 建立管理員
然後先用admin登入

一定要記得先用admin賬號登陸,然後才能在後面用mongonaut登陸,否則登陸不了後臺。

在用mongonaut登入即可
如果你在使用過程中遇到問題,歡迎交流。