iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 8
1

Server-side web frameworks

來源

寫在前面

前言略過,不過這裡用到一個片語 under our belt : 學到某事 。 送給大家~
接下來會以 框架 二字取代 frameworks , 一直切換輸入法而且字也好長 , 終於受不了了 。
還有...

縮寫/簡稱/代稱 原全文
框架 frameworks
CS/CSR Client-side/Client-side Render
SS/SSR Server-side/Server-side Render

本章閱讀需求: Server-side code 處理 & 回應 res HTTP req 以上兩者的基本了解 ( 回去看第五到七天,或原本網站 Client-Server overview 篇 )
本章目標: 了解框架可以簡化開發、維護 SS code 。 讓讀者思考如何選擇框架

概覽

SS 框架 , 又稱Web App 框架 , 提供一些工具 、 函式庫 ( libraies ) 簡化常見的網站開發任務 , 包含

  • routing URLs 處理
  • 跟 db 互動
  • 使用者權限相關設定
  • 資料輸出格式化 ( HTML, JSON, XML )
  • 加強網站安全性

之後我們會提供較多的細節 , 來談談框架在開發上的幫助;
還有一些可以注意哪些規範來挑選框架 , 然後列出一些選項。

框架能做什麼

你不一定要用框架 , 但強烈建議你用框架 , 因為這可以讓你活得更輕鬆

-- MDN

我們會討論一些網站開發的功能 , 要注意的是 : 並不是所有框架都必須提供這些功能

直接運作 HTTP req & res

框架允許我們用簡單的語法產生 SS code 去處理 req, res 。

下面範例為 Django ( Python 的 web 框架 ) ,
所有的 view function ( req 處理器 ) 接收 HttpReq object , 且回傳的 HttpRes 格式必須是 String

# Django view function
from django.http import HttpResponse

def index(request):
    # Get an HttpRequest (request)
    # perform operations using information from the request.
    # Return HttpResponse
    return HttpResponse('Output string to return')

Route req 對應合適的處理器 ( the appropriate handler )

大部分的網站都會有很多的連結 , 只用一個 function 處理這些連結會難以維護 ,
框架有個簡單的機制可以 map URL patterns 到特定處理器 function , 有更高的維護性 ,
因為我們不用動到底層的 code , 就可以更換所使用的 URL

不同的框架會有不同的 map 機制 。
這是 Flask ( 也是 Python 的 web 框架 ) :

@app.route("/")
def hello():
    return "Hello World!"

這是 Django :

urlpatterns = [
    url(r'^$', views.index),
    # example: /best/myteamname/5/
    url(r'^best/(?P<team_name>\w.+?)/(?P<team_number>[0-9]+)/$', views.best),
]

更容易地從 req 存取 data

有很多種方法可以把資料寫入 HTTP req 。
GET req 可能會取得由 URL paramters 或 URL structure 寫入的資料或檔案 ;
POST req 在 server 上更新 resource , 這個行為會將要更新的資料放在 req body 裡。
HTTP req 也可能會把在 session 或 cookie 裡 user 的資料帶入。

框架有個 programming-language-appropriate 機制 , 來存取資料。
舉例: Django 傳遞 HttpReq object 到每個 view function ,
這個 object 含有存取目標 URL 方法及特性 、 req 類型 、 GET/POST parameters 、 cookie/session data ... 等等 。
Django 也可以傳遞從 URL mapper 中 capture patterns 寫入的資訊


上一篇
七日: Client-Server 概覽 ( 回傳 HTML 之外的東西 , Web 框架 ( frameworks ) 簡化 server-side web 撰寫 )
下一篇
九日: Server-side web frameworks ( 框架能做的事 )
系列文
還在想要買哪一堂線上課程嗎?培養看文件的習慣吧!用 MDN 文件學後端:NodeJS & MongooseDB30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言