3 Python全棧工程師之從網頁搭建入門到Flask全棧項目實戰 - 入門Flask微框架( 三 )

  • cookies:請求中的cookie dict
  • headers:HTTP請求頭
  • 請求報文_練習
    1)獲取get參數(request.args):請求不傳,默認是None;獲取get參數時,對未傳值參數可以賦予默認值 , 常見應用場景為分頁
    3 Python全棧工程師之從網頁搭建入門到Flask全棧項目實戰 - 入門Flask微框架

    文章插圖
    2)解析請求頭中的IP地址((request.headers):通過request.headers.get()獲取請求頭相關信息;request.remote_addr獲取遠程客戶端ip地址
    3 Python全棧工程師之從網頁搭建入門到Flask全棧項目實戰 - 入門Flask微框架

    文章插圖
    5.3.請求鉤子問題:如下場景如何實現?
    • 每個請求中都要驗證用戶信息(是否已登錄、是否有權限訪問)
    • 限制來自某些IP的惡意請求
    針對上述問題 , 就可以使用鉤子函數來解決;同時使用鉤子函數可以減少重復代碼的編寫,便于維護;具體請求鉤子裝飾器函數如下:
    • before_first_request:服務器初始化后第一個請求到達前執行
    • before_request:每一個請求到達前執行
    • after_request:每次請求處理完成后執行,如果請求過程中產生了異常,則不執行
    • teardown_request:每次請求處理 完成后執行,如果請求過程中產生了異常也執行

    3 Python全棧工程師之從網頁搭建入門到Flask全棧項目實戰 - 入門Flask微框架

    文章插圖
    5.4.響應報文響應報文包含內容常用如下:
    • response:響應內容
    • status:響應狀態碼
    • headers:響應頭信息
    那如何修改響應報文內容呢?常見方法如下:
    1)在return的時候將響應報文內容加上:響應內容、響應狀態碼、自定義響應頭信息;不常用
    3 Python全棧工程師之從網頁搭建入門到Flask全棧項目實戰 - 入門Flask微框架

    文章插圖
    2)構造一個響應對象make_response;常用
    響應對象方式一:構造的時候就將響應報文內容傳進去
    3 Python全棧工程師之從網頁搭建入門到Flask全棧項目實戰 - 入門Flask微框架

    文章插圖
    響應對象方式二:先將對象構造好 , 修改對象對應屬性的值
    • make_response().headers:自定義響應頭
    • make_response().status_code:響應狀態碼
    • make_response().response:響應內容

    3 Python全棧工程師之從網頁搭建入門到Flask全棧項目實戰 - 入門Flask微框架

    文章插圖
    問:如果響應內容我想返回圖片視頻,或者文字字體顏色、樣式、大小都要定制怎么辦呢?
    解決方案:響應內容以html返回,可以用html文件作為響應內容傳到響應對象 make_response()里面;
    新建一個Directory , 名字命名為templates,將html文件放在該目錄下,注意目錄名字一定得叫這個,后面筆記內容會解釋為什么叫這個名字;通過render_template生成html對象,傳給make_response()響應對象 。
    3 Python全棧工程師之從網頁搭建入門到Flask全棧項目實戰 - 入門Flask微框架

    文章插圖
    6. Flask視圖重定向等內部視圖
    1)redirect():實現重定向,常見場景用于退出/登陸后重定向網頁頁面
    3 Python全棧工程師之從網頁搭建入門到Flask全棧項目實戰 - 入門Flask微框架

    文章插圖
    2)abort():處理錯誤,針對錯誤的狀態碼主動拋出報錯;abort后面不需要再加return
    3 Python全棧工程師之從網頁搭建入門到Flask全棧項目實戰 - 入門Flask微框架

    文章插圖

    3 Python全棧工程師之從網頁搭建入門到Flask全棧項目實戰 - 入門Flask微框架

    文章插圖
    問:能不能指定報錯頁面展示、或者自定義報錯頁面返回給客戶端展示?
    示例代碼模擬場景:對黑名單下的ip地址進行攔截,返回403狀態碼沒有權限訪問 , 并自定義報錯頁面;通過裝飾器@app.errorhandler()的函數對abort()拋出的狀態碼進行處理,注意@app.errorhandler()修飾的函數要傳入參數err , 打印出來發現err是403/404對應的報錯信息
    3 Python全棧工程師之從網頁搭建入門到Flask全棧項目實戰 - 入門Flask微框架

    文章插圖

    3 Python全棧工程師之從網頁搭建入門到Flask全棧項目實戰 - 入門Flask微框架

    文章插圖

    3 Python全棧工程師之從網頁搭建入門到Flask全棧項目實戰 - 入門Flask微框架

    文章插圖
    【3 Python全棧工程師之從網頁搭建入門到Flask全棧項目實戰 - 入門Flask微框架】

    推薦閱讀