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),包含了用戶的客戶端類型,操作系統類型等信息