2016-05-12 32 views
0

我正在尝试执行API请求,并且需要不同视图的API密钥。我试图使用会话变量,但关键似乎是在尝试从Sqlite数据库使用变量的其他格式。 API请求与数据库中的重点工作,但不与会话变量将base64.encodestring与数据库和会话变量配合使用时返回的返回值不同

我如何获得API密钥的数据库和会话:

key_session = request.session['key'] 
key_db = APIkey.objects.values_list('key', flat=True).get(pk=2) 

这两个返回相同的值,当我打印它们。重要的例子:

3h3asdh-asdasd:oisf87sdf87a5df76asdf83jhjhasgd8 

我使用base64.encodestring函数试图做身份验证API服务与我的钥匙时:

query = request.GET.get('query') 
url = urllib2.Request('https://api.someapiwebsite.com', 
     None, headers={'Content-Type':'application/json'}) 
base64string = base64.encodestring('%s' % (key_session)).replace('\n', '') 

如果我打印带有会话变量(key_session)base64string,我得到:

MmoihjsdasdoihhaG5tbjpuq9876eq9asd98a7Nmd3dWYzN2JmbWZ2aW1nMGVw== 

如果我打印带有会话变量(key_db)base64string,唯一的区别是最后两个字符==“IC”,我想这就是为什么身份验证API服务失败:

MmoihjsdasdoihhaG5tbjpuq9876eq9asd98a7Nmd3dWYzN2JmbWZ2aW1nMGVwIC 

什么让在编码字符串中的Base64这种差异?

编辑:

使用打印再版()的时候,我可以看到区别:

print repr(key_db) 
3h3asdh-asdasd:oisf87sdf87a5df76asdf83jhjhasgd8 
print repr(key_session) 
3h3asdh-asdasd:oisf87sdf87a5df76asdf83jhjhasgd8\x02\x02 
+0

使用'repr',即'打印(再版(key_db)'代替'打印(key_db) '。它可能表明其中一个字符串有尾随空格。 – Alasdair

+0

这显示了不同之处:key_session在最后有\ x02 \ x02值,但key_db没有.key_session如何可以不同? – MMakela

+0

我不知道为什么'request.session ['key']'是不同的,也许这是你的代码设置它的问题。你可以在编码之前去掉字符。 – Alasdair

回答

1

其中一个字符串可能包含一些尾随字符print没有显示。如果您使用repr,那么您应该能够看到有什么不同。

print(repr(key_session)) 
print(repr(key_db)) 

然后,可以将编码的字符串,例如之前剥去任何必要的字符:

key_session = key_session.rstrip('\x02') 
相关问题