sanic 在响应post 提交的数据时,分为两种方式:一种是传统的字符串数据,一种是json类型数据。sanic 对两种数据的接收方式有所不同。
1. 传统字符串方式
这种方式通过‘a=1$b=2' 的形式传递数据,接收方式也比较简单。
@app.post("/")
async def index(request):
s1 = request.form['username']
s2 = request.form['password']
return await file("./templates/compare.html", stock=[s1, s2, s3])
2. json 方式
@app.post("/login")
async def index(request):
print(request.body)
#request.body 中是byte 形式的数据,需要解码成utf-8
data = j_son.loads(request.body.decode("utf-8").replace("'",'"'))
#转换之后的data 数据类型是dict 类型
print("data",data,type(data))
username = data["username"]
password = data["password"]
print("paras from post request:",username,password)
return json({"login_verify": "true","username":username})
在使用curl 发送POST请求测试时,-d 参数中只能是单引号在内,双引号在外的格式,否则会报错。 但如果使用这种格式,在后端sanic 接收到post请求处理数据时,将数据从byte转换成字符串后使用json.loads()函数转为dict格式时,还需要将单引号转换为双引号。
后续测试发现, 使用前端发送实际请求时,携带的json格式数据是内部使用双引号的。