赞
踩
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
操作请求数据
对于web 应用来说对客户端向服务器发送的数据做出相应很重要,在Sanic中由传入的参数 request来提供请求信息。
为什么不像Flask 一样提供一个全局变量 request?
Flask 是同步请求,每次请求都有一个独立的新线程来处理,这个线程中也只处理这一个请求。而Sanic是基于协程的处理方式,一个线程可以同时处理几个、几十个甚至几百个请求,把request作为全局变量显然会比较难以处理。
Request 对象常用参数有
json(any) json body
from sanic.response import json
@app.route("/json")
def post_json(request):
return json({ "received": True, "message": request.json })
args(dict) URL请求参数
?key1=value1&key2=value2 将转变为
{'key1': ['value1'], 'key2': ['value2']}
raw_args(dict) 和args 类似
?key1=value1&key2=value2 将转变为
{'key1': 'value1', 'key2': 'value2'}
form(dict)处理 POST 表单请求,数据是一个字典
body(bytes)处理POST 表单请求,数据是一个字符串
其他参数还有:
file
ip
app
url
scheme
path
query_string
详细信息参考文档: Request Data
关于响应
Sanic使用response 函数创建响应对象。
文本 response.text('hello world')
html response.html('
hello world
')json response.json({'hello': 'world'})
file response.file('/srv/www/hello.txt')
streaming
from sanic import response
@app.route("/streaming")
async def index(request):
async def streaming_fn(response):
response.write('foo')
response.write('bar')
return response.stream(streaming_fn, content_type='text/plain')
redirect response.file('/json')
raw response.raw('raw data')
如果想修改响应的headers可以传入headers 参数
from sanic import response
@app.route('/json')
def handle_request(request):
return response.json(
{'message': 'Hello world!'},
headers={'X-Served-By': 'sanic'},
status=200
)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。