跳轉到內容

RapidSMS 開發者指南/建立 RapidSMS 應用

來自華夏公益教科書,開放的書籍,開放的世界

應用結構

[編輯 | 編輯原始碼]

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

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

一個最小的應用將包含

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

簡訊程式碼

[編輯 | 編輯原始碼]

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

app.py 的骨架

import rapidsms

class App(rapidsms.app.App):

    def parse(self, message):
        pass

    def handle(self, message):
        pass

它是如何工作的?

[編輯 | 編輯原始碼]

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

一旦收到一條訊息,它將遵循以下步驟

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

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

配置您的應用

[編輯 | 編輯原始碼]

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

test 應用的示例

[test]
country=ml

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

    def configure(self, country):
        pass

    def configure(self, **kwargs):
        pass

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

訊息物件

[編輯 | 編輯原始碼]

Message 物件是 RapidSMS 的核心。它是承載來自後端、路由器,然後返回到後端以傳遞給使用者的簡訊的載體。

  • 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()

此模型包含兩個屬性: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
華夏公益教科書