我有一个问题,从Microsoft Graph API请求照片不会检索照片,实际上会返回404错误。
第一个月
我知道这是base64解码的jpeg,但我不能弄清楚如何使用它来实际显示一个图像在html页面。
下面是我的视图中创建请求的代码,它在我的initialize上下文视图中:
def initialize_context(request):
## non relevant code ##
graph_photo_endpoint = 'https://graph.microsoft.com/beta/me/photo/$value'
headers = {'Authorization': 'Bearer ' + token}
photo_response = requests.get(graph_photo_endpoint, headers=headers)
if photo_response.status_code == 200:
context['photo_data'] = photo_response.content
photo_response.headers['Content-Type'] = 'image/jpeg'
## non relevant code ##
return context
字符串
它由需要加载照片的视图检索,用户需要登录才能访问照片:
@azure_ad_login_required
def profile(request):
context = initialize_context(request)
return render(request, 'profile.html', context)
型
下面是定义照片的html代码:
<img class="profile_pic" src="{{ photo_data }}" alt="Profile Picture" style="width:100%">
型
这就是我的graph_helper的样子:
import requests
import base64
from requests_oauthlib import OAuth2Session
graph_url = 'https://graph.microsoft.com/v1.0'
def get_user(token):
# Send GET request to retrieve user information from Microsoft Graph API
user = requests.get('{0}/me'.format(graph_url),
headers={'Authorization': 'Bearer {0}'.format(token)},
params={'$select': 'displayName,mail,mailboxSettings,userPrincipalName,givenName,companyName,surName,jobTitle'})
user.headers['Content-Type'] = 'image/jpeg'
return user.json()
型
我不知道我做错了什么,有人能帮我吗?
2条答案
按热度按时间tez616oj1#
定位线路
字符串
在
initialize_context
中,并尝试修改该行为:型
您需要在该文件的顶部导入IO:
型
我通常创建一个抽象用户类,然后创建一个一对一的UserProfile类来保存/缓存图像。使用Django的ImageFile的方式类似:
型
然后在一个模板文件中,我可以用途:
型
如果你没有存储图像,你可能需要在src中嵌入base64编码,但是,我不喜欢这样做,因为对于每个请求,你需要去查找图像(我认为这是不必要的)。
你可能会得到类似于here的描述:
型
但我不确定你是否有
photo_data
上下文中的b64数据。你可能需要测试一下。不能保证任何这将工作-我有一个非常不同的设置比你在我如何检索这些图像,但也许这里有一些东西,将帮助你。
col17t5w2#
谢谢你的投入,这让我思考为什么我会这样做。这让我想到了这个解决方案:
字符串
对于HTML端:
型