如何在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登陸,否則登陸不了後臺。