本文實例講述了Sanic框架請求與響應。分享給大家供大家參考,具體如下:
前面介紹了Sanic框架的路由,這里接著介紹Sanic框架的請求與響應。
簡介
Sanic是一個類似Flask的Python 3.5+ Web服務器,它的寫入速度非???。除了Flask之外,Sanic還支持異步請求處理程序。這意味著你可以使用Python 3.5中新的閃亮的異步/等待語法,使你的代碼非阻塞和快速。
前言:Sanic最低支持Python 3.5,如果需要學習Sanic,請先下載版本不低于3.5的Python包
請求數據
當一個端點收到一個HTTP請求時,路由功能被傳遞到一個request對象。以下變量可以作為request對象的屬性訪問:
@app.route("/post_data",methods=["POST"])
async def post_data(request):
# 將打印傳遞過來的JSON數據
print(request.json)
return text("it is ok!")
?name=laozhang&age=20。如果URL被解析,那么args字典將如下所示:{"name":["laozhang"],"age":[20]}URL?name=laozhang&age=20,raw_args字典將如下所示:{"name":"laozhang","age":20}
@app.route("/post_file_data",methods=["POST"])
async def post_file_data(request):
info = request.files.get("file")
print(info.name)
print(info.type)
print(info.body)
return text("it is ok!")
{"name":["laozhang"]}
@app.route("/post_form_data",methods=["POST"])
async def post_form_data(request):
name = request.form.get("name")
return text("it is ok!")
byte類型dict類型str類型str類型tuple類型
@appr.route("/get_app_info")
async def get_app_info(request):
print(request.app.config)
return text("it is ok!")
http或https/get_app_infoname=zhangsan或者為一個空白字符串/get/<id>get與getlist
當我們訪問一個GET請求,并傳入相關參數時,如下的請求:
@app.route("/get_info")
async def get_info(request):
print(request.args.get("name"))
print(request.args.getlist("name")
return text("it is ok!")
當我們傳入一個name為laozhang時,在上面有提到,args字典將會是{"name":["laozhang"],所以,訪問上面的路由,將會打印如下結果:
laozhang
["laozhang"]
響應
使用sanic.response模塊中的函數來創建響應
純文本:
from sanic.response import text
@app.route("/text")
async def get_text(request):
return text("it is text response!")
HTML:
from sanic.response import html
@app.route("/html")
async def get_html(request):
return html("<p>it is html!</p>")
JSON:
from sanic.response import json
@app.route("/json")
async def get_json(request):
return json({"name":"laozhang"})
FILE:
from sanic.response import file
@app.route("/file")
async def get_file(request):
return await file("/xx/aa/abc.png")
切記,不能少了await關鍵字
STREAM:
from sanic.response import stream
@app.route("/stream")
async def get_stream(request):
async def stream_fn(response):
response.write("abc")
response.write("def")
return stream(stream_fn,content_type="text/plain")
文件流:針對大文件,上面文件與流的組合
from sanic.response import file_stream
@app.route("/file_stream")
async def get_file_stream(request):
return await file_stream("/xx/aa/abc.png")
切記,不能少了await關鍵字
重定向:
from sanic.response import redirect
@app.route("/redirect")
async def get_redirect(request):
return redirect("/json")
RAW:未編碼的body響應
from sanic.response import raw
@app.route("/raw")
async def get_raw(request):
return raw(b"it is raw data")
訪問此接口后,將會立即下載一個名為raw的文件,里面包含內容it is raw data
修改請求頭和狀態值:如果需要修改請求頭和狀態值,請將headers和status參數傳遞給上面這些函數,下面以json為例
from sanic.response import json
@app.route("/json")
async def get_json(request):
return json({"name":"老張"},headers={"age":18},status=403)
訪問此接口后,會發現原來本應是200的狀態值變成了403,而且請求頭信息中增加了{"age":18}
更多關于Python相關內容可查看本站專題:《Python入門與進階經典教程》、《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設計有所幫助。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。