之前寫了一篇搭建sae的python平台,通過微信公眾平台驗證的博文。現在就是要承上啟下,開始開發的第一步。也許你會說開發的第一步就是寫代碼。那我會對你表示鄙視,儘管南苑隨筆是個很簡單的應用,但是多少也還需要設計一下。確定一下需求,為了將來能夠吸引到粉絲來關注我的公眾號,我必須要定位好我的app,然後提供優秀的內容,並確定它的運營模式,才能進一步地提升我們的應用水準。
需求分析
首先,這個app是要用python寫的,那麼就一定要優雅一點,pythonic一點。對於我自己來說,我要使得這個app至少能夠滿足我閱讀若干與南苑相關的文章的要求才行。故而需要對南苑隨筆進行需求分析:
定位: 為南苑或者外校同學提供我們在南苑生活和學習的文章。文體不限,內容形式包括{圖片,語音,文字},推送給使用者,這正是微信能夠提供給我的。
約定: 允許投稿,但是投稿必須通過管理員的審核。其實很大程度上,我們是為了向粉絲們推介 @bibo-果凍 和 @daoluan-鄭思願 合作的那本《南苑隨筆——IT小小鳥外傳》。
內容: 校園生活,學習,感情,分享,趣味,攝影,文學作品,簡單社交 ,歌曲等等。
服務: 提供每1天/2天定期推送文章或語音。同時相應使用者發來的請求,對使用者請求進行分析後返回所要求的內容。
效能: 要求伺服器在5秒內返回使用者的請求內容,在網路差的時候,這個就難說了。能夠同時處理至少20位粉絲的請求(其實到底有沒有這麼多粉絲髮來請求,我心裡還是沒有數啊)。
系統設計
這次,我吸取了上次的經驗教訓,要先完成邏輯和資料的設計,最後才去設計我們的互動介面(包括互動方式和菜單)。資料先行,那麼一切就從構建起資料庫開始。參照wordpress的部落格資料庫,就可以設計出基本的資料庫架構。這部分就交給 @daoluan-思願 來搞定,我相信他會完成的相當出色。
本系統需要一個部落格系統,和一個微信服務app,部落格系統作為web端,用瀏覽器可訪問的。而微信app則負責推送到使用者的微信帳號聊天介面。故而我們的資料庫設計就很清晰了,需要:
user表——使用者
post表——文章
blog配置——部落格的設定
category表——分類
———————————次要———————————
url表——友情連結
guest_book表——留言簿
而我需要用到的僅僅是部落格系統資料庫的一個子集——post表和guest_book表(也許會用到category表)。故而開發微信app則只需要自行建立兩個表進行實驗即可。
發送訊息實驗
暫且不把設計邏輯排到議程上來,我們來嘗試一下在第三方伺服器和微信伺服器,以及用戶端進行通訊。假如使用者發送來一個請求,由於已經綁定了URL,且開啟了開發模式,那麼就微信伺服器就會轉寄這個請求到我們的伺服器,我們的伺服器要解析這個請求,然後返回所請求的內容。
我們需要一個類來處理get請求,以及定時向微信伺服器傳送群發的文章。
該類 weixin_scnuwriter設計如下:
handle_request(request) # 處理請求
parse_request_xml(xml) # 解析請求
response_msg(request) # 響應請求(關鍵邏輯部分)
pack_text_xml(post_msg, response_msg) # 打包響應的常值內容,需要參考微信API,供response_msg調用
# 另外在資料庫方面要能夠讀取,需要django於資料庫打交道,不過我們暫時不實現,只是做一個簡單的測試。
下面是handle_request代碼:
def handle_request(request): if request.method == 'GET': response = HttpResponse(check_signature(request),content_type="text/plain") # 如果是GET請求,那麼核對簽名 return response elif request.method == 'POST': response = HttpResponse(response_msg(request),content_type="application/xml") # 如果是POST請求,那麼響應訊息 return response else: return None