Flask的請求物件--request
request-Flask的請求物件
請求解析和響應封裝大部分是有Werkzeug完成的,Flask子類化Werkzeug的請求(Request)物件和響應(Response)物件,並添加了和程式的特定功能。
#encoding=utf-8
from flask import Flask,request app=Flask(__name__)
@app.route('/hello/') def hello(): name = request.args.get('name','Flask') #獲取查詢引數name的值,預設是Flaskreturn '<h1>Hello, %s</h1>' % name #替換到返回值中
if __name__ == '__main__': app.run(debug=True)
結果:
當url中不指定name和值,預設返回name的值為Flask
列印request物件的屬性資訊
#encoding=utf-8
from flask import Flask,request
app=Flask(__name__)
@app.route('/hello/')
def hello():
name = request.args.get('name','Flask') #獲取查詢引數name的值 print "request.args:",request.args print "request.args.items():",request.args.items() print "request.full_path:",request.full_path print"request.path:",request.path print "request.host:",request.host print "request.host_url:",request.host_url print "request.headers:\n",request.headers print u"請求資料request.data:",request.data print "request.endpoint:",request.endpoint print "request.json:",request.json print "request.method:",request.method print u"請求的url模式(http或https)request.scheme:",request.scheme print "request.user_agent:\n",request.user_agent return '<h1>Hello, %s</h1>' % name # 替換到返回值中
if __name__ == '__main__': app.run(debug=True)
重新整理頁面請求後輸入結果:可以看到url的資訊
request.args: ImmutableMultiDict([('name', u'xiaxiaoxu')])
request.args.items(): [('name', u'xiaxiaoxu')]
request.full_path: /hello/?name=xiaxiaoxu
request.path: /hello/
request.host: 127.0.0.1:5000
request.host_url: http://127.0.0.1:5000/
request.headers:
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
Connection: keep-alive
Host: 127.0.0.1:5000
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.9
Accept-Encoding: gzip, deflate, br
請求資料request.data:
request.endpoint: hello
request.json: None
request.method: GET
請求的url模式(http或https)request.scheme: http
request.user_agent:
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
127.0.0.1 - - [25/Dec/2018 22:08:19] "GET /hello/?name=xiaxiaoxu HTTP/1.1" 200 -
除了URL,請求報文中的其他資訊都可以通過request物件的屬性和方法獲取,常用的屬性有:
path:base_url
full_path:url
host:url_root
host_url
args:Werkzeug的ImmutableMultiDict物件。儲存解析後的查詢字串,可通過字典方式獲取鍵值。如果你想獲取未解析的原生查詢字串,可以用query_string屬性
blueprint:當前藍本的名稱
cookies:一個包含所有隨請求提交的cookies的字典
data:包含字串形式的請求資料
endpoint:於當前請求相匹配的端點值
files:Werkzeug的MultiDict物件,包含所有上傳檔案,可以使用字典的形式獲取檔案。使用的鍵為檔案input標籤中的name值,對應的值為Werkzeug的FileStorage物件。可以呼叫save()方法並傳入儲存路徑來儲存檔案
form:Werkzeug的ImmutableMultiDict物件。於files類似,包含解析後的表單資料。表單欄位值通過input標籤的name屬性值作為鍵獲取
values:Werkzeug的CombinedMultiDict物件,結合了args和form屬性的值
get_data(cache=True,as_text=False,parse_from_data=False):獲取請求中的資料,預設讀取為位元組字串(bytestring),將as_text設為True則返回值將是解碼後的unicode字串
get_json(self,force=False,silent=False,cache=True):作為json解析並返回資料,如果MIME型別不是json,返回None(除非force設為True);解析出錯則丟擲Werkzeug提供的BadRequest異常(如果未開啟除錯模式,則返回400錯誤響應),如果silent設為True則返回None;cache設定是否快取解析後的json資料
headers:一個Werkzeug的EnvironHeaders物件,包含首部欄位,可以以字典的形式操作
json:包含解析後的json資料,內部呼叫get_json(),可通過字典的方式獲取鍵值
method:請求的HTTP方法
referrer:請求發起的源URL,即referer
scheme:請求的URL模式(http或https)
user_agent:使用者代理(User Agent, UA),包含了使用者的客戶端型別,作業系統型別等資訊