阿吉的Sanic教程--04請求數據

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']
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章