iT邦幫忙

2022 iThome 鐵人賽

DAY 13
0
Modern Web

資工琪琪的後端學習筆記(python&flask)系列 第 13

Day 13 Flask 要求字串處理 Query String

  • 分享至 

  • xImage
  •  

要求字串(Query String)

回顧一下

要求字串(Query String)是網址的一部分

通訊協定://主機名稱:埠號/路徑?要求字串

要求字串的格式

必須按照特定格是撰寫

前端送出

透過網址,送出包含要求字串的請求

  • 使用自己開發的測試Server
    • http://127.0.0.1/getSum?max=10
    • http://127.0.0.1/getSum?max=5
  • 相同路徑,提供不同的要求字串

後端接收

在路由的處理函式中,取得要求字串的資料

  • 前端送出的網址
    • http://127.0.0.1/getSum?max=10
    • http://127.0.0.1/getSum?max=5
  • 後端接收程式
    @app.route("/getSum")
    def getSum():
        data=request.args.get("max",None)    #None那個式預設值
        return data
    

後端要求字串語法詳解

透過請求物件(request)取得要求字串的資料

  • 程式語法
    request.args.get("參數名稱",預設值)
  • 後端接收的程式範例
    @app.route("/getSum")
    def getSum():
        data=request.args.get("max",None)    #None那個式預設值
        return data
    

實際操演

建立路徑 /getSum

  1. 首先我們要先建立 /getSum 對應的處理函式

    • 利用要求自串 (Query String) 提供彈性
  2. 執行Server在網址欄中在後面增加 /getSum的路徑
    ~真的有ㄟ!~

運用 Query String

  1. 在getSum函式底下增加一個可以記錄要求字串的變數 maxNum 並將 maxNum 轉成 int
  2. 執行Server,我們看到在/getSum底下因為沒有Query String 所以 return 的值為1加到100如果我們在/getSum後面鍵入?max=10 那這時 maxNum=10 所以會算到1加到10

    code

from unittest import result
from flask import Flask #載入 Flask
from flask import request #載入 Request 物件
#在建立Application物件,可以設定靜態檔案的路徑處理
app=Flask(
            __name__,
            static_folder="public",   #靜態檔案的「資料夾」名稱
            static_url_path="/"  #靜態檔案的對應網址「路徑」
        ) 
# 所有在static 資料夾底下的檔案,都對應到網址路徑 /abc/檔案名稱


#建立路徑 / 對應的處理方式

#路由設定

#首先我們要先建立 /getSum 對應的處理函式
#利用要求自串 (Query String) 提供彈性

@app.route("/getSum")   #建立路徑
def getSum():   #處理函式,給他一個1+..+maxNum的Function
    maxNum=request.args.get("max",100)  #如果網址沒有要求字串, maxNum=100
    maxNum=int(maxNum)  #maxNum剛收到的資料為string要轉為int
    result=0
    for i in range(1,maxNum+1):
        result+=i
    return "結果 : "+str(result)

@app.route("/") #'/'叫正斜線反之'\'叫反斜線
def index():#用來回應路徑 / 的處理函式
    """ print("請求方法:", request.method)   #(物件.屬性)
    print("通訊協定 :", request.scheme)   
    print("主機名稱 :", request.host)
    print("路徑 :",request.path)
    print("完整的網址 :",request.url) """ #Shift + Alt + A 快速註解
    #其實上面這些在網址就看得到了

    ''' 從request「物件」內的headers「屬性」裡的get「方法」取得的標頭名稱"user-agent" '''
    print("瀏覽器何作業系統 :", request.headers.get("user-agent")) 
    print("語言偏好 :", request.headers.get("accept-language"))
    print("引薦網址", request.headers.get("referrer"))
    
    return "Hello Flask"    # 回傳路徑 / 的內容

#建立路徑 /data對應的處理函式
@app.route("/data")
def handData():
    return "My Data"
#動態路由:建立 /usr/使用者名稱 的處理函式

@app.route("/user/<username>")
def handleUser(username):
    return "Hello "+username

@app.route("/player/<name>")
def User(name):
    if name=="琪琪":
        return "嗨! "+name
    else:
        return "我是BOT"

app.run(port=3000) #啟動伺服器

運用 Query String (一個變數以上時)

  1. 我們再新增一MinNum在 getSum函式底,這邊我們minNum的值預設為0

  2. 我們運行Server看一下結果,max、min誰先設都沒關係

    from unittest import result
    from flask import Flask #載入 Flask
    from flask import request #載入 Request 物件
    #在建立Application物件,可以設定靜態檔案的路徑處理
    app=Flask(
                __name__,
                static_folder="public",   #靜態檔案的「資料夾」名稱
                static_url_path="/"  #靜態檔案的對應網址「路徑」
            ) 
    # 所有在static 資料夾底下的檔案,都對應到網址路徑 /abc/檔案名稱
    
    
    #建立路徑 / 對應的處理方式
    
    #路由設定
    
    #首先我們要先建立 /getSum 對應的處理函式
    #利用要求自串 (Query String) 提供彈性
    
    @app.route("/getSum")   #建立路徑
    def getSum():   #處理函式,給他一個1+..+maxNum的Function
        minNum=request.args.get("min",0)
        minNum=int(minNum)
        maxNum=request.args.get("max",100)  #如果網址沒有要求字串, maxNum=100
        maxNum=int(maxNum)  #maxNum剛收到的資料為string要轉為int
        result=0
        for i in range(minNum,maxNum+1):
            result+=i
        return "結果 : "+str(result)
    
    @app.route("/") #'/'叫正斜線反之'\'叫反斜線
    def index():#用來回應路徑 / 的處理函式
        """ print("請求方法:", request.method)   #(物件.屬性)
        print("通訊協定 :", request.scheme)   
        print("主機名稱 :", request.host)
        print("路徑 :",request.path)
        print("完整的網址 :",request.url) """ #Shift + Alt + A 快速註解
        #其實上面這些在網址就看得到了

        ''' 從request「物件」內的headers「屬性」裡的get「方法」取得的標頭名稱"user-    agent" '''
        print("瀏覽器何作業系統 :", request.headers.get("user-agent")) 
        print("語言偏好 :", request.headers.get("accept-language"))
        print("引薦網址", request.headers.get("referrer"))
    
        return "Hello Flask"    # 回傳路徑 / 的內容

    #建立路徑 /data對應的處理函式
    @app.route("/data")
    def handData():
        return "My Data"
    #動態路由:建立 /usr/使用者名稱 的處理函式
    
    @app.route("/user/<username>")
    def handleUser(username):
        return "Hello "+username

    @app.route("/player/<name>")
    def User(name):
        if name=="琪琪":
            return "嗨! "+name
        else:
            return "我是BOT"
    
    app.run(port=3000) #啟動伺服器

參考文章與資料來源

澎澎的教學網站
澎澎的yt教學頻道


上一篇
Day 12 Flask 請求物件基礎 HTTP Request
下一篇
Day 14 Flask 回應與導向 Response & Redirect
系列文
資工琪琪的後端學習筆記(python&flask)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言