一、前言
參考:http://www.imooc.com/wiki/flasklesson/flaskhttp.html
上篇我們創建了第一個 Flask 程序,並且在瀏覽器中成功看到了 Flask 程序給我們返回的 Hello World。但是你有沒有注意到,我們看到的內容只是在後臺進行寫死的,也就是說無論你怎麼請求,看到的永遠是 Hello World,無法根據自己的需求讓 Flask 程序返回給你想要的內容?這該怎麼辦呢?不要急,我們有 HTTP 協議,HTTP 協議提供了多種方法訪問服務端資源
二、常用的HTTP方法
瀏覽器向 Web 服務器發出請求時,它向服務器傳遞了一個請求信息,HTTP 請求信息由 3 部分組成:
- 請求行;
- 請求頭;
- 請求正文。
根據 HTTP 標準,常用的 HTTP 請求如下所示:
三、Flask中的HTTP方法
1、GET方法
from flask import Flask app = Flask(__name__) # 不指定 methods,默認就是 GET @app.route('/') def hello_world(): # 返回字符串 return '<b>Hello World</b>' @app.route('/get', methods=["GET"]) def get_(): # 返回字符串 return '這是get請求' if __name__ == '__main__': app.run()
默認的 app.route() 是僅支持 GET 請求的,如果想通過 POST、PUT、DELTE 等方法正常請求的話,需要添加 methods 參數
2、POST方法
from flask import Flask app = Flask(__name__) @app.route('/post', methods=["POST"]) def post_(): # 返回字符串 return {"message":"請求成功","code":"200"} if __name__ == '__main__': app.run()
如果 return 的是字典,那麼請求得到的響應數據是 Json 格式哦
四、URL組成部分
1、URL組成詳解
一個常見的url:https://www.cnblogs.com/Chilam007/
由以下幾部分組成:scheme://host:port/path?key=value
- scheme:代表的是訪問的協議,一般爲 http 或者 https。例如,https://www.baidu.com 的協議是 https;
- host:主機名、域名,例如,https://www.baidu.com 的 host 爲 www.baidu.com;
- port:端口號,http 協議默認使用 80 端口,https 協議默認使用 443 端口。通常情況下,使用默認值,不需要顯式的寫明端口號,例如,https://www.baidu.com 的端口是 443。某些情況下,可以顯式的寫明端口號,例如,http://localhost:5000 的端口號是 5000;
- path:頁面路徑,例如:https://www.cnblogs.com/Chilam007/p/16991728.html的 path 是 Chilam007/p/16991728
- key=value:查詢字符串,例如:https://www.baidu.com/s?wd=python,查詢字符串是 wd=python,查詢字符串包括兩部分:參數名和參數值,這個例子中,參數名是 wd,參數值是 python
2、在Flask中分析URL參數
- 服務端收到將客戶端發送的數據後,封裝形成一個請求對象,在 Flask 中,請求對象是一個模塊變量 flask.request
- request 對象包含了衆多的屬性
- 假設 URL 等於 http://localhost/query?userId=123,則與 URL 參數相關的屬性如下:
3、實際例子
from flask import Flask,request app = Flask(__name__) def echo(key, value): print('%-10s = %s' % (key, value)) # 定義路徑 /query 的處理函數 query() @app.route('/query') def query(): '''打印 request 對象中和 URL 相關的屬性;URL 中的查詢參數保存在 request.args 中''' echo('url', request.url) echo('base_url', request.base_url) echo('host', request.host) echo('host_url', request.host_url) echo('path', request.path) echo('full_path', request.full_path) print() print(request.args) # 打印查詢參數 userId 的值 print('userId = %s' % request.args['userId']) return 'hello' if __name__ == '__main__': app.run()
瀏覽器訪問:http://127.0.0.1:5000/query?userId=123
控制檯輸出結果: