django系列五:資料庫配置

前言

數據的持久化幾乎是每個系統都將面臨的,所以數據的存儲也是多樣化的。該系列中應用的資料庫是mongodb。但是該系列不對mongodb做詳細的介紹。在程序中應用到的是這套orm框架mongoengine。選擇其它資料庫請參照官網setting。

資料庫安裝

此處不多過多介紹,可以mongodb參考官方的安裝。

Mongoengine

安裝mongoengine

執行命令:pip install mongoengine

執行完畢後,看下安裝的版本,執行命令

pip list

結果如下:

現在應用的是0.15.0版本,說不定當你看到該文章的時候已經不是該版本了。

連接資料庫

連接資料庫其實挺簡單的,在settings.py文件中引入mongoengie,然後通過mongoengine的connect方法連接。mongoengine連接mongodb有很多中方式,可以參考官網。具體操作如下:

analysis/settings.py

增加如下代碼

import mongoenginemongoengine.connect(analysis, host=localhost, port=27017)

其中connect幾個參數簡單說一下:

  • analysis: 資料庫的名稱
  • host: mongodb資料庫所在的伺服器地址
  • port:埠(27017默認的)

mongodb可視化工具Robomongo

這是資料庫,其中手動創建了一個users(全部用小寫)表,往表中插入一條數據(mongodb中稱為文檔),欄位的名字為 username和email。然後看下數據:

{ "_id" : ObjectId("5a1661e4752a376cdafac0da"), "username" : "oogou11", "email" : "oogou11@hotmail.com"}

其中_id是mongodb對文檔生成的一個objectId。對mongodb不熟悉的話,可以認為對應的是sql server 或者oracle的主鍵。

定義Model

資料庫已經有了,在django中對應資料庫的操作,其實就是定義model,然後對model進行操作。首先在/web 建立一個model文件夾,然後創建一個user_model.py文件,即文件的路徑為/web/models/user_model.py

然後user_model.py文件的代碼如下:

#引用mongoenginefrom mongoengine import *class Users(Document): username=StringField() #mongoengine中的欄位類型 email=StringField()

其中Users這個類中的 username和email屬性,對應的就是資料庫中users表中的 「username」和「email」欄位。而mongodb資料庫中的_id對應的是 Users表中的id欄位。這裡不用列出來,mongoengine已經替我們處理了。

注意:欄位以及欄位的名稱 必需與資料庫中的名稱一一對應,因為用的是 Document。

這樣資料庫中的表已經映射到model上。對資料庫的操作無非增、刪、改、查,然後對應到django中就是對model的操作。

讀取數據

現在需要通過訪問 http://localhost:8080/web/ 讀取資料庫中所有的用戶,對應的就是views.py中的index視圖。更改下代碼

/web/views.py

from django.http import HttpResponsefrom django.template import loader# 引用modelfrom .models.user_model import Usersdef index(request): template = loader.get_template(news/index.html) #獲取所有數據 user_data = Users.objects() context = { user_data: user_data, } return HttpResponse(template.render(context, request))

模版index.html代碼更改如下:

/web/templates/news/index.html

{% if user_data %} <ul> {% for user in user_data %} <li> id:{{user.id}} 用戶名:{{user.username}} 郵箱:{{user.email}} </li> {% endfor %} </ul>{% else %} <p>數據為空</p>{% endif %}

然後通過訪問 localhost:8080/web/ 得到的結果如下

通過以上結果可以看出讀取的數據。

更新數據

現在需要把郵箱 email的值改成 123@qq.com,讓我們對數據進行操作下吧。為了簡便直接創一個update視圖,然後通過url請求就好了。具體步驟就不做詳細介紹了,可以參考django系列三:創建自定義視圖 然後創建一個update視圖。

增加一個視圖:

/web/views.py

def update(request): id=5a1661e4752a376cdafac0da update_count = Users.objects(id=id).update(email=123@qq.com) return HttpResponse(update_count)

執行 http://localhost:8080/web/update。執行結果返回 1,說明執行成功。

然後再重新請求下 http://localhost:8080/web/

返回結果

其它操作就不在詳細介紹了,詳見mongoengine文檔。


推薦閱讀:

關於零基礎學習 Python 有什麼好的建議?
Django 多線程問題是怎麼回事?
是否框架的目的是不一樣的?
國內用 Django 開發的知名站點有哪些?
緩存中命名keys時,應該有什麼命名規則來命名,方便後期調用以及維護?

TAG:Django框架 | MVC | Python |