Sanic 接收前端post 提交的json数据

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格式数据是内部使用双引号的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值