W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
許多代碼可以消耗請求數(shù)據(jù)并對其進行預處理。例如最終出現(xiàn)在已讀取的請求對 象上的 JSON 數(shù)據(jù)、通過另外的代碼路徑出現(xiàn)的表單數(shù)據(jù)。當你想要校驗收到的 請求數(shù)據(jù)時,這似乎帶來不便。而有時這對某些 API 是必要的。
幸運的是,無論如何可以包裝輸入流來簡單地改變這種狀況。
下面的例子計算收到數(shù)據(jù)的 SHA1 校驗碼,它從 WSGI 環(huán)境中讀取數(shù)據(jù)并把校驗 碼存放到其中:
import hashlib
class ChecksumCalcStream(object):
def __init__(self, stream):
self._stream = stream
self._hash = hashlib.sha1()
def read(self, bytes):
rv = self._stream.read(bytes)
self._hash.update(rv)
return rv
def readline(self, size_hint):
rv = self._stream.readline(size_hint)
self._hash.update(rv)
return rv
def generate_checksum(request):
env = request.environ
stream = ChecksumCalcStream(env['wsgi.input'])
env['wsgi.input'] = stream
return stream._hash
要使用這段代碼,所有你需要做的就是在請求消耗數(shù)據(jù)之前調用計算流。(例如: 小心訪問 request.form 或其它此類的東西。例如,應注意避免 before_request_handlers 訪問它)。
用法示例:
@app.route('/special-api', methods=['POST'])
def special_api():
hash = generate_checksum(request)
# Accessing this parses the input stream
files = request.files
# At this point the hash is fully constructed.
checksum = hash.hexdigest()
return 'Hash was: %s' % checksum
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: