【发布时间】:2016-05-12 09:52:33
【问题描述】:
我正在尝试执行 API 请求,我需要 API 密钥来查看不同的视图。我正在尝试使用会话变量,但密钥似乎采用其他格式,而不是尝试使用 Sqlite 数据库中的变量。 API 请求使用数据库中的密钥,但不能使用会话变量
我如何从数据库和会话中获取 API 密钥:
key_session = request.session['key']
key_db = APIkey.objects.values_list('key', flat=True).get(pk=2)
当我打印它们时,它们都返回相同的值。关键示例:
3h3asdh-asdasd:oisf87sdf87a5df76asdf83jhjhasgd8
我在尝试使用我的密钥对 API 服务进行身份验证时使用 base64.encodestring 函数:
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() 时的区别:
print repr(key_db)
3h3asdh-asdasd:oisf87sdf87a5df76asdf83jhjhasgd8
print repr(key_session)
3h3asdh-asdasd:oisf87sdf87a5df76asdf83jhjhasgd8\x02\x02
【问题讨论】:
-
使用
repr,即print(repr(key_db)而不是print(key_db)。它可能表明其中一个字符串有尾随空格。 -
这显示了区别:key_session 最后有 \x02\x02 值,但 key_db 没有。 key_session 有什么不同?
-
我不知道为什么
request.session['key']不同。也许这是设置它的代码的问题。您可以在编码之前剥离字符。
标签: python django sqlite django-views