CouchDB、Python与认证
我安装了couchDB版本0.10.0,现在想通过从couchDB维基下载的Couch类用Python和它进行交流。问题是:
Create database 'mydb': {'error': 'unauthorized', 'reason': 'You are not a server admin.'}
我手动编辑了local.ini文件,加入了我在mac上的登录名和密码。现在我可以通过futon完全访问它,但用Python却没有成功。这是HTTP头的问题吗?
我有点无从下手了,谢谢!
6 个回答
5
这个例子中的 Couch
类没有向数据库传递任何认证信息,所以它不允许进行特权操作也就不奇怪了。因此,你的选择只有以下几种:
- 完全禁用认证(就像你提到的那样)
- 把用户名和密码作为URI的一部分传递
- 把用户名和密码作为
Authorization
的HTTP请求头传递
如果你想传递用户名和密码,就需要修改 Couch
类。发送 Authorization
的HTTP请求头比较简单,因为 Couch
类使用的是 httplib.HTTPConnection
类。你可以像下面这样在 Accept
头旁边添加这个头:
headers = {
"Accept": "application/json",
"Authorization": "Basic " + 'username:password'.encode('base64')[:-1]}
其他HTTP请求方法也是一样的。
关于基本认证的文档可以在这里找到:
6
你还可以这样做:
db = couchdb.Database("http://your.url/yourdb")
db.resource.http.add_credentials(username, password)
这样之后,你的所有请求应该都能正常工作。
23
为了支持大卫的回复,(也就是说“这是我在Python 2.6中使用CouchDB 0.8模块和CouchDB 1.0.2的做法”)
couch = couchdb.Server(couch_server)
couch.resource.credentials = (USERNAME, PASSWORD)