上篇歷經了前端全面的養成之路,從中我們也接觸到一些後端語言,後端語言或工具相對前端發展穩定且變動沒這麼快,但也不代表我們有時間學什麼都要會,我們需要的是一個對於前端有幫助的後端助攻手,讓我們在需要架設商用級網站平台時,能以較低的學習成本為前端所用。
這個套路是以方便性和穩定性綜合考量所選擇的策略,但每個人對語言的偏好不同,不需筆戰。
以下來分享Python多好用。
人生苦短,我選Python
Python就兩個特性,簡單 & 強大。
光這兩點你就不得不認識這個語言。
下面是透過Python的輕量Web框架Flask所做的Hello World範例。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello! Do not try to spy me!"
if __name__ == '__main__':
app.run(debug=True)
以上範例可能看不出來他有多簡單,我們來看看製作Restful API上,與NodeJS的比較。
NodeJS(Express):
const express = require('express');
const app = express();
app.get('/api/:id',(req, res) => {
res.send({
"id": req.params.id,
"version": "This is Version"
});
});
app.listen(3000, () => {
console.log('Listening on port 3000...');
});
Python(Flask):
from flask import Flask, request
from flask_restful import Resource, Api
app = Flask(__name__)
api = Api(app)
class APIDocs(Resource):
def get(self, id):
return {
"id": id,
"version": "This is Version"
}
api.add_resource(APIDocs, '/api/<string:id>')
if __name__ == '__main__':
app.run(debug=True)
長度還是差不多,沒關係我們再看另外一個爬蟲的例子。
NodeJS:
var request = require("request");
var fs = require("fs");
var cheerio = require("cheerio");
request({
url: "https://www.cwb.gov.tw/V7/forecast/taiwan/Taipei_City.htm",
method: "GET"
}, function (e, r, b) {
if (e || !b) { return; }
var $ = cheerio.load(b);
var result = [];
var titles = $(".BoxContent .FcstBoxTable01 tbody tr");
for (var i = 0; i < titles.length; i++) {
result.push($(titles[i]).text().replace(/[\n\t\t]+/g, ''));
}
fs.writeFileSync("result.json", JSON.stringify(result));
});
Python:
import requests
from bs4 import BeautifulSoup
r = requests.get('https://www.cwb.gov.tw/V7/forecast/taiwan/Taipei_City.htm')
r.encoding='utf-8'
if r.status_code == requests.codes.ok:
soup = BeautifulSoup(r.text, "html.parser")
titles = []
for s in soup.find('table', class_='FcstBoxTable01').find("tbody").findAll('tr'):
titles.append(s.text.replace('\n', '').replace('\r', ''))
fp = open("result.json", "r+", encoding='UTF-8')
fp.writelines('[' + ','.join(['\"{0}\"'.format(i) for i in titles]) + ']')
fp.close()
抓出結果皆如下:
["今晚至明晨 09/18 18:00~09/19 06:0024 ~ 27舒適30 %","明日白天 09/19 06:00~09/19 18:0024 ~ 29舒適至悶熱30 %","明日晚上 09/19 18:00~09/20 06:0023 ~ 26舒適40 %"]
這就有差了(python少NodeJS兩行),是不是感覺起來
Python上有類似Node上NPM的套件管理系統PIP。安裝flask與flask-restful非常方便。之後課程開始後,會有完整的環境安裝流程。
#安裝flask
pip install flask
#安裝flask-restful
pip install flask-restful
對於前端人員來學後端,本該站在巨人的肩膀上,不需要篳路藍縷,以起後端。Python易學好懂,語言強制縮排所以易讀,背後stable的3rd party library豐富,且應用廣泛。可用在數據分析與處理、Web開發應用、網路爬蟲(urllib)、系統部署腳本、人工智慧應用等,甚至連單機視窗程式(wxPython)都有它的影子。對有前端程式底子的人來說,學會運用Python不會超過兩週的時間,但像Java, C++, C#這種heavy框架的語言可能需要三個月。等你學完,別人也把你的idea做出來了。
從近年來程式語言的發展趨勢就可以知道,一個程式語言能讓系統快速的開發建置是其成長的關鍵。
天下武功,唯快不破
Python也不是沒有缺點,最大的缺點就是執行速度較慢。但若以現今的電腦硬體發展速度來看,程式寫的快比程式跑起來很快更為重要。但這不代表可以不管BigO的時間複雜度,迴圈亂開,遞迴亂寫。而是Python的簡單快速開發大大蓋過它performance較差的缺點。這才是我們採用它的真正原因。
這堂課我們將以Python的輕量框架Flask來介紹後端系統架設,但若以大型商用平台支援的完整性與成熟度,使用Django會比較好。