为了账号安全,请及时绑定邮箱和手机立即绑定

CouchDB urlencode Python

CouchDB urlencode Python

慕码人2483693 2021-03-31 22:06:41
我的问题是,我必须编码一个字典才能进行Sofadb设计:我有这个命令:params = {'descending': 'true', 'startkey': 'Mexico', 'endkey': 'Mexico'}我想要这样的网址:http://localhost:5984/hello-world/_design/precios/_view/precios?descending=true&startkey=%22Mexico%22&endkey=%22Mexico%22或像这样:http://localhost:5984/hello-world/_design/precios/_view/precios?descending=true&startkey="Mexico"&endkey="Mexico"因此,我urllib.urlencode将dict转换为查询字符串:urllib.urlencode(params)这回给我类似的东西:http://localhost:5984/hello-world/_design/precios/_view/precios?descending=true&startkey=Mexico&endkey=Mexico因此,这对于CouchDB是无效的URL,因为CouchDB需要在startkey和中使用双引号endkey如果我将字典更改为以下内容:params = {'descending': 'true', 'startkey': '"Mexico"', 'endkey': '"Mexico"'}这将返回一个有效的URL,如下所示:http://localhost:5984/hello-world/_design/precios/_view/precios?descending=true&startkey=%22Mexico%22&endkey=%22Mexico%22但是我不想在单引号内传递双引号,有没有一种方法可以返回有效的URL?
查看完整描述

4 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

Couch参数值是JSON文字,因此应通过对值进行JSON编码来创建。然后,您还需要对该结果进行URL编码以适合标准URL。


例子:


import urllib, json

def to_json_query(params):

    return urllib.urlencode({p: json.dumps(params[p]) for p in params})


>>> qs = to_json_query({'descending': True, 'startkey': 'Mexico', 'endkey': 'Mexico'})

'startkey=%22Mexico%22&endkey=%22Mexico%22&descending=%22true%22'

请注意,我已经改变的值descending是一个布尔值True,只要你想一个JSON布尔值true,而不是字符串"true"。


(这里的现有答案假定为字符串,并且不进行URL编码或JSON编码,因此,对于任何JSON特殊或URL特殊字符,任何非ASCII或非字符串数据类型,都将失败。)


查看完整回答
反对 回复 2021-04-05
?
largeQ

TA贡献2039条经验 获得超7个赞

params = {'descending': 'true', 'startkey': 'Mexico', 'endkey': 'Mexico'}

pairs = ['{}="{}"'.format(k,v) for k,v in params.items()]


print '&'.join(pairs);


--output:--

startkey="Mexico"&endkey="Mexico"&descending="true"

如果您不希望引用true,则在for循环中执行相同的操作,并且不要引用true。


查询字符串中不允许使用双引号,因此最好使用:


pairs = ['{}=%22{}%22'.format(k,v) for k,v in params.items()]


查看完整回答
反对 回复 2021-04-05
  • 4 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号