跳轉到內容

RapidSMS 開發人員指南/建立 RapidSMS 應用

來自 Wikibooks,開放世界中的開放書籍

應用結構

[編輯 | 編輯原始碼]

RapidSMS 應用是一個 Django 應用,其中包含一些特定於 RapidSMS 的檔案,並遵循一些約定。一個典型的應用看起來像這樣

__init__.py
app.py
models.py
admin.py
views.py
urls.py
static/
templates/

一個最小的應用將包含

__init__.py
app.py
  • app.py: SMS 程式碼
  • models.py: Django 模型(資料庫)
  • admin.py: Django 管理員
  • views.py: Django 檢視(Web 介面)
  • urls.py: Djangi URL 模式(用於 Web 介面)
  • static/: 包含 Web 介面靜態檔案的資料夾。可訪問於 http://<server>/static/<appname>/
  • templates: Django 模板

SMS 程式碼

[編輯 | 編輯原始碼]

應用的 SMS 程式碼由一個 rapidsms.app.App 類組成,該類將被路由器例項化並呼叫。

app.py 的骨架

import rapidsms

class App(rapidsms.app.App):

    def parse(self, message):
        pass

    def handle(self, message):
        pass

它是如何工作的?

[編輯 | 編輯原始碼]

路由器由 route 命令啟動,例項化所有 App 的 App 類。這在 local.iniapps= 字串的順序中完成;然後它呼叫每個類的 start 方法,然後呼叫每個類的 configure 訊息。

收到訊息後,它會遵循以下步驟

  1. 呼叫每個 App 的 parse 方法,將 Message 物件傳遞給它。
  2. 呼叫每個 App 的 handle 方法,將 Message 物件傳遞給它。

一旦其中一個 handle 方法返回 True,則該訊息被認為已處理,因此不會傳遞給其他應用。這就是順序重要的原因。

配置你的應用

[編輯 | 編輯原始碼]

RapidSMS 提供在 local.ini 檔案中為你的應用新增一些配置的能力。在你的 local.ini 中,為你的應用新增一個部分,其中包含鍵值對。

test 應用的示例

[test]
country=ml

新增此類配置將使路由器在啟動期間呼叫 test App 的 configure 方法。確保你的應用有一個 configure 方法可以響應它

    def configure(self, country):
        pass

或者

    def configure(self, **kwargs):
        pass

請注意,所有引數都作為字串傳遞。

訊息物件

[編輯 | 編輯原始碼]

Message 物件是 RapidSMS 的核心。它負責承載從後端到路由器,然後又回到後端以傳送到使用者的 SMS。

  • message.text: 實際的文字訊息。這可以是 strunicode 文字。沒有大小限制。
  • message.peer: 傳送者/接收者身份。根據後端,這通常是表示電話號碼或等效內容的字串。
  • message.date: 表示接收日期的 datetime 物件。
  • message.status: 表示訊息狀態的字串。沒有被廣泛使用。
  • message.person: 一個 Person 物件,它儲存對連線的引用。
  • message.connection: 一個 Connection 物件,它儲存對後端和身份的引用。
  • message.send(): 將物件傳送到適當的後端。
  • message.respond(text, status): 建立一條訊息,傳送回此訊息的傳送者。實際傳送將被延遲。
  • message.flush_responses(): 傳送所有使用 .respond() 建立的響應。
  • message.forward(identity, text): 在相同後端上建立具有不同身份的新訊息物件,然後呼叫 respond()

大多數 RapidSMS 應用用於資料收集,並依賴於資料庫。由於 RapidSMS 建立在 Django 之上,因此建議使用 Django 的模型來實現這一點。

由於這裡沒有特定於 RapidSMS 的內容,請參考 Django 文件[1]

建立模型

[編輯 | 編輯原始碼]

模型駐留在 models.py 檔案中,應該繼承自 django.db.models.Model

from django.db import models

class SMS(models.Model):
    number = models.CharField(max_length=30)
    text = models.TextField()

此模型包含 2 個屬性:number 和 text,兩者都是字串。

Django 的模型是 ORM(物件關係對映)。這意味著在你的應用中,你將像例項化即時物件一樣例項化這些物件,Django 將負責對資料庫的儲存/檢索。

重要提示: 你的模型只是你資料的表示。你可以把它看作是你的表格欄位列表。每次你修改它時,你都需要要求 Django 更新實際的資料庫,它是獨立的。

建立資料庫

[編輯 | 編輯原始碼]

如上所述,Django 將完全負責資料庫訪問。只需確保你的 local.ini 關於資料庫的 配置正確,然後重新同步資料庫。

./rapidsms syncdb

此命令將建立每個新新增的模型。

如果你需要修改模型,則必須刪除並重新建立資料庫

./rapidsms reset <appname>

轉儲和還原資料

[編輯 | 編輯原始碼]

Django 包含一個用於備份和恢復資料庫(模型)內容的工具。

./rapidsms dumpdata <appname>

這將顯示應用程式appname中所有模型資料的序列化版本。您也可以選擇特定的模型。

./rapidsms dumpdata <appname>.SMS > backup.json

之前的命令將僅儲存 SMS 模型的內容並將其重定向到檔案。Django 中資料轉儲和恢復的預設格式為 JSON。

要恢復備份檔案,請使用以下命令

./rapidsms loaddata backup.json


在 Django 術語中,檢視就是網頁。

請參考 文件,因為以下內容都不特定於 RapidSMS。

要以 Django 的方式顯示網頁,您需要完成三個步驟

設定 URL

[編輯 | 編輯原始碼]

檔案urls.py記錄了您的應用程式的所有 URL。您需要在urls.py中定義每個檢視(頁面)才能訪問它們。

名為test的應用程式的示例

from django.conf.urls.defaults import *

import test.views as views

urlpatterns = patterns('',
    url(r'^test/?$', views.index),
)

上面的檔案將為每個對http://<server>/test的 HTTP 請求呼叫index檢視(目前不存在)。

建立模板

[編輯 | 編輯原始碼]

為了節省開發人員在處理 HTML 方面的時間和精力,Django 提供了使用模板的功能。模板是一個 HTML 檔案,它可以接受特定的語法來顯示檢視中的變數和其他資料。

templates/資料夾中建立一個 RapidSMS 示例模板

{% extends base_template %}

{% block content %}
<p>Hello {{ name }}!</p>
{% endblock %}

此模板擴充套件了base_template(這是 RapidSMS 的設計),並將塊content的內容替換為一段文字。這段文字包含一個模板變數,我們將在檢視中用一些文字替換它。

建立一個 HTTP 函式

[編輯 | 編輯原始碼]

檢視只是一個返回HTTP物件的函式,該函式將顯示在訪問者的瀏覽器上。

一個最小的views.py檔案

from django.http import HttpResponse

def index(request):
    return HttpResponse("hello")

使用此檢視,在瀏覽器上顯示相應的網頁將導致一個空白頁面,其中包含單詞 hello。

我們不必在檢視中編寫 HTML,而是可以呼叫剛剛建立的模板。

在這方面,Django 和 RapidSMS 有一些區別。以下是 RapidSMS 的方法

from rapidsms.webui.utils import render_to_response

def index(request):
    greeting = "Thomas"
    return render_to_response(request, 'templates/index.html', {'name': greeting})

這樣,我們就顯示了一個模板,並向它傳遞了一個context(雜湊),其中包含模板變數列表及其關聯值。

在瀏覽器中顯示它將導致一個漂亮的 RapidSMS 使用者介面,其中包含一句問候 Thomas 的句子。

Django 管理員

[編輯 | 編輯原始碼]

要以可視方式訪問與模型相對應的資料,您可以啟用 Django 管理員。Django 提供了一個 Web 介面,用於管理其某些功能,以及開發人員建立的模型。

它可以透過http://<server>/admin訪問。

請參考自定義管理員使用者介面以將其啟用您的應用程式。

執行 RapidSMS · SMS 和關鍵字器

  1. http://docs.djangoproject.com/en/1.1/topics/db/models/#topics-db-models
華夏公益教科書