要點:
小程式是前後端分離的。前端使用的是微信自定義的一套規範wxml+wxss+json+js,本質還是html+css+js。後臺可以選用任何你熟悉的語言:Java,Python,PHP,Ruby等等,在這篇文章裡我選用Python的Flask框架+Gunicorn+Nginx來快速搭建。資料庫我選擇MySQL,nosql資料庫我選擇Redis。當然,你的小程式可以很輕量級,甚至不需要使用到資料庫。小程式一大思想“用完即走”。後臺需要跑在一臺自己的伺服器上,同時你也需要一個已備案的https域名來進行對映。01
準備工作
1).一臺雲伺服器
可以上各大雲提供商平臺租用,我使用的是學生低配,¥10/月。我在伺服器上使用的作業系統為ubuntu。購買一個域名,並通過備案。域名價格在1-10000000不等,我使用的是某com域名,¥50/年。在微信公眾平臺註冊一個賬號並下載小程式開發工具。詳細說明 從http到https。現在很多SSL證書可以免費申請,下面會詳細說下如何配置。2).目標我們的目標是實現一個簡單的小程式,能夠實現前後端對接。從http到https
首先擁有一個已備案域名,並已經解析到你的伺服器上了。如果你在阿里/騰訊雲租用了伺服器,可以申請免費的SSL證書。找到相應入口並申請就可以了。稽核一般很快,我的在一小時以內。稽核通過後下載頒發的證書,先儲存在本地。之後通過ftp傳到伺服器的相應路徑。在伺服器上安裝Nginx。首先測試你的Nginx服務是否能正常執行,配置完開啟自己的域名能顯示nginx的歡迎頁時即為成功配置。然後將你的證書通過ftp上傳到伺服器的任意路徑下(建議和Nginx在同一路徑下)開啟Nginx的配置檔案,如圖配置(證書路徑填寫自己的)重啟服務,瀏覽器通過https訪問,能正常顯示頁面即為配置成功。02
小程式前端開發
1).開發環境
現在,開啟你的小程式開發工具,並使用你的APPID新建一個專案。(我這裡沒有多餘的APPID,所以先使用測試環境)
2).構建模版
可以先勾選“建立普通快速啟動模板”來生成一個官方測試demo,如下圖:
讓我們來觀察一下目錄結構。app.js,app.json,app.wxss分別對應全域性的方法,全域性配置引數和全域性樣式。而在具體包下的index.js,index.wxml,index.wxss則對應相應的元素。
3).一個簡單的頁面已經生成了,讓我們來看看效果
很簡單,但是可以看出來「大事兒」裡的內容是寫死的,此時我們需要後端來提供資料。
03
伺服器部分
1).安裝5大件:安裝了Python環境 apt-get install python-dev安裝Flask pip install flask安裝UWSGI pip install uwsgi安裝了Nginx apt-get install nginx安裝了Gunicorn pip install gunicorn2).配置首先在你的/var/www/目錄下建立一個測試目錄,比如/var/www# mkdir test
然後使用chmod更改此目錄的許可權chmod 777 /var/www/test
這裡講一下chmod的規則,因為這裡是測試用例,所以為了方便,直接使用777。
3).NginxUbuntu下的Nginx的目錄結構大致如下:
所有的配置檔案都在/etc/nginx下,每個虛擬主機已經安排在了/etc/nginx/sites-available目錄下啟動程式檔案在/usr/sbin/nginx日誌檔案放在了/var/log/nginx中,分別是access.log和error.log在/etc/init.d/下建立了啟動指令碼nginx預設的虛擬主機的目錄設定在了/usr/share/nginx/www啟動服務:/etc/init.d/nginx start,重啟服務:/etc/init.d/nginx restart現在,我們需要進入到Nginx的配置中,改動配置檔案。vim /etc/nginx/site-avalidable/default
4).GunicornGunicorn伺服器大致與各種Web框架相容,只需非常簡單的執行,輕量級的資源消耗,以及相當迅速。此時需要在“準備”步驟中建立的測試目錄下放入我們的測試執行專案,我選擇的FTP工具是:xftp。我傳入了一個簡單的用來測試的Python檔案wsgi.py,使用命令/var/www/myflask# vim wsgi.py預覽此時在測試目錄下鍵入命令gunicorn -w 4 -b 127.0.0.1:8000 wsgi:app執行。
此時,訪問伺服器,可以看到“Hello World”已經可以正常顯示了。
04
小程式後端開發
後端我們採用Python的Flask框架,外加Gunicorn+Nginx來快速搭建。首先需要一些Python的基礎知識,相信大家在菜鳥學Python學了這麼久,這完全不是問題。現在,讓我們了解一下Flask如何使用。
1).獲得物件
這是一個最簡單的Demo。執行流程為:從flask模組獲取物件app,通過路由,執行方法,返回內容。此時在瀏覽器訪問(預設埠5000):127.0.0.1:5000/ ,可以看到國際慣例Helloworld的介面。
2).路由唯一URL這個規則似乎有點拗口,但其實也不能理解。優點是:
使得使用者在遺忘尾斜線時,允許關聯的 URL 接任工作,與 Apache 和其它的伺服器的行為並無二異保證了 URL 的唯一,有助於避免搜尋引擎索引同一個頁面兩次。如果實在記不清,最好的方法是破罐子破摔:統一不帶尾部“/”3).模板渲染大部分時候,在使用者訪問了一個URL的時候,我們都需要給他/她返回一個介面,我們當然不會用Python本身去渲染HTML,為此,Flask 配備了Jinja2模板引擎。
看完以下程式碼示例,相信你就能理解。
我們建立“templates”資料夾用於儲存模板,Flask 會在 templates 資料夾裡尋找模板。所以,如果你的應用是個模組,這個資料夾應該與模組同級;如果它是一個包,那麼這個資料夾作為包的子目錄:
#情況 1 模組:
/application.py
/templates
/hello.html
#情況 2 包:
/application
/__init__.py
/templates
/hello.html
4).GET和POST請求方式不止這個兩種,但是最常用的是這兩種,如果對這兩種不熟悉,可以先去查一下HTTP方法的資料,這裡只演示在flask中的用法。
5).請求物件
下面我來模擬一個簡單的登入操作,首先是控制器:
可以看到執行流程:
獲得請求判斷請求型別獲得登陸資料valid_login()方法驗證登陸若登陸成功,執行login_success()方法若登入失敗,新增失敗資訊,返回失敗模板下面是上述用到的兩個方法:
6).資料渲染那麼,現在如何在小程式端獲取資料並顯示呢?我們去簡要讀下小程式的官方文件。
請注意,小程式是純非同步方式來發送請求的。依葫蘆畫瓢,我們來模仿一下:
我們將獲取的資料已經儲存在"toast"這個變數中了,再去讀文件,看看小程式是如何進行資料繫結的。
然後我們將之前寫死的文字換成"{{toast}}",這時再重新整理,可以看到,資料已經顯示了。
看一下效果:
好,經常上面這些步驟,此時,一套完整的流程已經結束,雖然實現了一個微小的功能,但麻雀雖小,五臟俱全。接下來,就是去進一步學習,去如何改造以及豐富我們的專案了。
比如稍微努力一下: