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 訊息。
一旦收到一條訊息,它將遵循以下步驟
- 呼叫每個應用的 parse 方法,並將 Message 物件傳遞給它。
- 呼叫每個應用的 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:實際的文字訊息。這可以是 str 或 unicode 文字。沒有大小限制。
- 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 的方式顯示網頁,您需要完成三個步驟:
檔案 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 物件的函式。
一個最小的 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 提供了一個 Web 介面來管理其某些功能,以及開發人員建立的模型。
它可以透過 http://<server>/admin 訪問。
請參閱 自定義管理員使用者介面 以瞭解如何為您的應用程式啟用它。