4. 請求數據
你的鼓勵是我前進的動力,請爲我點個贊吧!
當一個節點收到一個請求後,路由函數就傳遞一個請求對象(Resquest Object)。傳遞的參數以對象屬性的方式綁定到請求對象上。
(1) json數據
sanic同樣提供了爲前端返回json參數的基本功能,下面通過一個例子進行說明:
from sanic.response import json
@app.route("/json")
def post_json(request):
return json({ "received": True, "message": request.json })
sanic的直接將dict數據類型(字典)加工成json數據返回給前端,使用起來比較方便。不管是任何數據開發和都可以打包成字典類型進行返回。
(2)args(字典類型)
sanic提供了快速處理查詢字符串的功能,如果字符串被解析,查詢字符串將轉換成字典的形式形式。以下進行簡單對比:
查詢字符串如下:
?key1=value1&key2=value2
解析後的字符串如下所示:
{'key1':燵'value1'],'key2':燵'value2']}
可以看出解析後的查詢參數爲列表。
(3)raw_args(原始參數)
有的時候需要獲取參數原始url查詢參數,與args不同的是,raw_args解析後的字典的值不是列表類型,而是簡單的字符串類型,如下所示。
{'key1':'value1','key2':'value2'}
(4)file(文件對象的字典)
前端向後臺發送文件時,一般都是通過列表發送的,該文件對象具有名字、類型、主體的組成部分。具體示例代碼如下所示:
from sanic.response import json
@app.route("/files")
def post_json(request):
test_file = request.files.get('test')
file_parameters = {
'body': test_file.body,
'name': test_file.name,
'type': test_file.type,
}
return json({ "received": True, "file_names": request.files.keys(), "test_file_parameters": file_parameters })
以上代碼實現將前端發送到後臺的數據返回給前端數據顯示。後端通過get獲取參數後,進行數據文件的組合,使用文件字典對象的方式進行。
(5)form(字典對象)-表單提交
from sanic.response import json
@app.route("/form")
def post_json(request):
return json({ "received": True, "form_data": request.form, "test": request.form.get('test') })
(6)body(bytes)
原始body這個屬性可以在請求數據中獲取相應的原始數據,同時可以不考慮數據類型的干擾。具體代碼示例的如下所示:
from sanic.response import text
@app.route("/users", methods=["POST",])
def create_user(request):
return text("You are trying to create a user with the following POST: %s" % request.body)
(7)其他request對象的請求參數
名稱 | 含義 |
---|---|
headers(dict類型) | 請求頭字典,其中包含所有請求頭聲明 |
method(str類型) | 其中包含請求方式 |
ip(str類型) | 請求來源ip |
port(str類型) | 請求者端口 |
socket(tuple類型) | 請求者的(ip,port) |
app | 應用對象對象的處理函數 |
url | 請求路由信息 |
scheme | 請求協議(http/https) |
host | 請求的host(localhost:8080) |
path | 請求的路由例如:/A/to/B |
query_string | 查詢字符串如“foo=bar”,或者爲空字符串“” |
uri_template | 模版處理函數 |
token | 用戶認證的開始部分 |
獲取請求參數要使用get或者是getlist,一般通過request的RequestParameers進行獲取,需要注意的是get方法返回的是列表參數的第一個值,而getlist獲取的整個列表的值,具體示例代碼如下所示:
from sanic.request import RequestParameters
args = RequestParameters()
args['titles'] = ['Post 1', 'Post 2']
args.get('titles') # => 'Post 1'
args.getlist('titles') # => ['Post 1', 'Post 2']