2、flask第二站-請求與相應

1、HTTP方法

HTTP (與 Web 應用會話的協議)有許多不同的訪問 URL 方法。默認情況下,路由只回應 GET 請
求,但是通過 route() 裝飾器傳遞 methods 參數可以改變這個行爲。

一些常用的HTTP方法

1、GRT

瀏覽器告知服務器:只 獲取 頁面上的信息併發給我。這是最常用的方法。

2、HEAD

瀏覽器告訴服務器:欲獲取信息,但是隻關心 消息頭 。應用應像處理 GET 請求一樣來處
理它,但是不分發實際內容。在 Flask 中你完全無需人工干預,底層的 Werkzeug 庫已經
替你打點好了。

3、POST

瀏覽器告訴服務器:想在 URL 上 發佈 新信息。並且,服務器必須確保 數據已存儲且僅存
儲一次。這是 HTML 表單通常發送數據到服務器的方法。

4、PUT

類似 POST 但是服務器可能觸發了存儲過程多次,多次覆蓋掉舊值。你可 能會問這有什麼
用,當然這是有原因的。考慮到傳輸中連接可能會丟失,在 這種 情況下瀏覽器和服務器之
間的系統可能安全地第二次接收請求,而 不破壞其它東西。因爲 POST它只觸發一次,所以
用 POST 是不可能的。

5、DELETE

刪除給定位置的信息。

6、OPTIONS

給客戶端提供一個敏捷的途徑來弄清這個 URL 支持哪些 HTTP 方法。 從 Flask 0.6 開
始,實現了自動處理。

什麼時候GET,什麼時候選擇POST呢?
GET是獲取內容,POST是提交內容。
當瀏覽器用GET來提交內容時,也能實現,但是會出現問題
首先是GET限制傳遞的數據內容大小
其次GET提交時,提交的內容會在地址欄顯示出來,並不安全

2、程序和請求上下文

Flask 從客戶端收到請求時,要讓視圖函數能訪問一些對象,這樣才能處理請求。

Flask 使用上下文臨時把某些對象變爲全局可訪問。例如請求對象封裝了客戶端發送的 HTTP 請求。

from flask import request
@app.route('/useragent/')
def userAgent():
user_agent = request.headers.get('User-Agent')
#headers.get獲取瀏覽器請求的頭部,
user:用戶 Agent(代理),瀏覽器此時就是用戶的代理。
return '<p>Your browser is %s</p>' % user_agent
#把獲取的內容再返回到頁面

3、響應

Flask 調用視圖函數後,會將其返回值作爲響應的內容。大多數情況下,響應就是一個簡單的字符
串,作爲 HTML 頁面回送客戶端。
但 HTTP 協議需要的不僅是作爲請求響應的字符串。 HTTP 響應中一個很重要的部分是狀態碼,
Flask 默認設爲 200,這個代碼表明請求已經被成功處理。
如果視圖函數返回的響應需要使用不同的狀態碼, 那麼可以把數字代碼作爲第二個返回值,添加到響
應文本之後。

1、下述視圖函數返回一個 400 狀態碼,表示請求無效:

@app.route('/')
def index():
return '<h1>Bad Request</h1>', 400

2、Flask視圖函數還可以返回Response對象

from flask import make_response
@app.route('/response/')
def response():
resp = make_response('<h1>Bad Request</h1>',400)
return resp

總結:響應的兩種方法

1. 視圖函數直接返回一個元組 (response, status, headers)
2. 視圖函數返回一個make_resonse()函數產生的響應對象

4、Cookies

cookies的操作:

  1. 通過請求對象的 cookies 屬性來訪問 Cookies。(請求對象的 cookies 屬性是一個內容爲客戶端
    提交的所有 Cookies 的字典。)

  2. 通過響應對象的set_cookie方法來設置 Cookies。

@app.route('/response/')
def resp():
    res = make_response('<h1>Bad request</h1>',400)
    res.set_cookie('name1','123456')
    #這裏就是說的第一種方法
    print request.cookies.get('name1')
    這裏用的get就是上面說的第二種方法
    return res
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章