1. 程式人生 > >Flask的請求物件--request

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的值,預設是Flask    
return '<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),包含了使用者的客戶端型別,作業系統型別等資訊