Flask request 屬性詳解

一、關於request

在Flask的官方文檔中是這樣介紹request的:對於 Web 應用,與客戶端發送給服務器的數據交互至關重要。在 Flask 中由全局的 request 對象來提供這些信息。

從Flask模塊導入request:from flask import request
request的屬性:下面是request可使用的屬性,其中黑體是比較常用的。

Request屬相
屬性名 解釋
form  一個從POST和PUT請求解析的 MultiDict(一鍵多值字典)。
args

MultiDict,要操作 URL (如 ?key=value )中提交的參數可以使用 args 屬性:

searchword = request.args.get('key', '')

values  CombinedMultiDict,內容是formargs。 
可以使用values替代form和args。
cookies 請求的cookies,類型是dict。
stream 在可知的mimetype下,如果進來的表單數據無法解碼,會沒有任何改動的保存到這個 stream 以供使用。很多時候,當請求的數據轉換爲string時,使用data是最好的方式。這個stream只返回數據一次。
headers  請求頭,字典類型。
data  包含了請求的數據,並轉換爲字符串,除非是一個Flask無法處理的mimetype。
files  MultiDict,帶有通過POST或PUT請求上傳的文件。
environ  WSGI隱含的環境配置。
method 請求方法,比如POST、GET。
path 獲取請求文件路徑:/myapplication/page.html
script_root  
base_url 獲取域名與請求文件路徑:http://www.baidu.com/myapplication/page.html
url 獲取全部url:http://www.baidu.com/myapplication/page.html?id=1&edit=edit
url_root 獲取域名:http://www.baidu.com/
is_xhr 如果請求是一個來自JavaScript XMLHttpRequest的觸發,則返回True,這個只工作在支持X-Requested-With頭的庫並且設置了XMLHttpRequest
blueprint  藍圖名字。
endpoint  endpoint匹配請求,這個與view_args相結合,可是用於重構相同或修改URL。當匹配的時候發生異常,會返回None。
json 如果mimetypeapplication/json,這個參數將會解析JSON數據,如果不是則返回None。 
可以使用這個替代get_json()方法。
max_content_length 只讀,返回MAX_CONTENT_LENGTH的配置鍵。
module  如果請求是發送到一個實際的模塊,則該參數返回當前模塊的名稱。這是棄用的功能,使用blueprints替代。
routing_exception = None 如果匹配URL失敗,這個異常將會/已經拋出作爲請求處理的一部分。這通常用於NotFound異常或類似的情況。
url_rule = None 內部規則匹配請求的URL。這可用於在URL之前/之後檢查方法是否允許(request.url_rule.methods) 等等。 
默認情況下,在處理請求函數中寫下 
print('request.url_rule.methods', request.url_rule.methods) 
會打印:
request.url_rule.methods {‘GET’, ‘OPTIONS’, ‘HEAD’}
view_args = None 一個匹配請求的view參數的字典,當匹配的時候發生異常,會返回None。
其他方法

get_json(force=False, silent=False, cache=True)

on_json_loading_failed(e)

二、常用方法的使用

#代碼示例,僅僅是爲了測試request的屬性值
@app.route('/login', methods = ['GET','POST'])
def login():
    if request.method == 'POST':
        if request.form['username'] == request.form['password']:
            return 'TRUE'
        else:
#當form中的兩個字段內容不一致時,返回我們所需要的測試信息
            return str(request.headers)        #需要替換的部分
    else:
        return render_template('login.html')

1、method:請求的方法

return request.method        #POST

2、form:返回form的內容

return json.dumps(request.form)        #{"username": "123", "password": "1234"}

3、args和values:args返回請求中的參數,values返回請求中的參數和form

return json.dumps(request.args)       
#url:http://192.168.1.183:5000/login?a=1&b=2、返回值:{"a": "1", "b": "2"}
print(request.args['a'])
#輸出:1
return str(request.values)        
#CombinedMultiDict([ImmutableMultiDict([('a', '1'), ('b', '2')]), ImmutableMultiDict([('username', '123'), ('password', '1234')])])

4、cookies:cookies信息

return json.dumps(request.cookies)        #cookies信息

5、headers:請求headers信息,返回的結果是個list

return str(request.headers)        #headers信息
request.headers.get('User-Agent')        #獲取User-Agent信息

6、url、path、script_root、base_url、url_root:看結果比較直觀

return 'url: %s , script_root: %s , path: %s , base_url: %s , url_root : %s' % (request.url,request.script_root, request.path,request.base_url,request.url_root)
'''
url: http://192.168.1.183:5000/testrequest?a&b , 
script_root: , 
path: /testrequest , 
base_url: http://192.168.1.183:5000/testrequest , 
url_root : http://192.168.1.183:5000/
'''

7、date、files:date是請求的數據,files隨請求上傳的文件

@app.route('/upload',methods=['GET','POST'])
def upload():
    if request.method == 'POST':
        f = request.files['file']
        filename = secure_filename(f.filename)
        #f.save(os.path.join('app/static',filename))
        f.save('app/static/'+str(filename))
        return 'ok'
    else:
        return render_template('upload.html')

#html
<!DOCTYPE html>
<html>
    <body>
        <form action="upload" method="post" enctype="multipart/form-data">
            <input type="file" name="file" /><br />
            <input type="submit" value="Upload" />
        </form>
    </body>
</html>

 

 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章