iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 5
1
Software Development

30天全端手把手學徒計畫-前後端整合之旅系列 第 5

[課前規劃]我也要做二刀流:為前端準備的第二外語-我為什麼選擇Python?

上篇歷經了前端全面的養成之路,從中我們也接觸到一些後端語言,後端語言或工具相對前端發展穩定且變動沒這麼快,但也不代表我們有時間學什麼都要會,我們需要的是一個對於前端有幫助的後端助攻手,讓我們在需要架設商用級網站平台時,能以較低的學習成本為前端所用。

這個套路是以方便性和穩定性綜合考量所選擇的策略,但每個人對語言的偏好不同,不需筆戰。

以下來分享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做出來了。

The 2018 Top Programming Languages
Coding Language Traffic


從近年來程式語言的發展趨勢就可以知道,一個程式語言能讓系統快速的開發建置是其成長的關鍵。

天下武功,唯快不破

Python也不是沒有缺點,最大的缺點就是執行速度較慢。但若以現今的電腦硬體發展速度來看,程式寫的快程式跑起來很快更為重要。但這不代表可以不管BigO的時間複雜度,迴圈亂開,遞迴亂寫。而是Python的簡單快速開發大大蓋過它performance較差的缺點。這才是我們採用它的真正原因。

這堂課我們將以Python的輕量框架Flask來介紹後端系統架設,但若以大型商用平台支援的完整性與成熟度,使用Django會比較好。


上一篇
[課前規劃]切膚之痛:前端技術養成之路
下一篇
[課前規劃]越過山丘,真的無人等候
系列文
30天全端手把手學徒計畫-前後端整合之旅33

尚未有邦友留言

立即登入留言