如何在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登录即可
如果你在使用过程中遇到问题,欢迎交流。

你可能感兴趣的:(django)