You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Django调用Microsoft Graph API无法获取并显示头像求助

问题分析与解决方案

一、API返回404的原因及修复

  1. 端点版本问题:你当前使用beta版本端点https://graph.microsoft.com/beta/me/photo/$value,beta版本存在不稳定或权限差异风险,建议切换到稳定的v1.0端点:

    https://graph.microsoft.com/v1.0/me/photo/$value
    
  2. 用户无头像:若用户未在Microsoft 365中设置头像,调用$value端点会直接返回404。可先调用https://graph.microsoft.com/v1.0/me/photo(不带$value)查看元数据,若返回404则确认是无头像场景,需添加默认头像兜底逻辑。

  3. 权限不足:确保Azure AD应用已配置Delegated权限中的User.Read(或User.ReadBasic.All),且用户已同意该权限。

二、图片无法显示的修复

当前代码直接将二进制图片数据传给HTML模板,img标签的src无法识别原始二进制,需转换为Data URI格式:

修改initialize_context函数:

def initialize_context(request):
    ## 无关代码 ##

    graph_photo_endpoint = 'https://graph.microsoft.com/v1.0/me/photo/$value'
    headers = {'Authorization': 'Bearer ' + token}
    photo_response = requests.get(graph_photo_endpoint, headers=headers)
    
    if photo_response.status_code == 200:
        # 二进制数据转base64编码,拼接Data URI前缀
        import base64
        photo_base64 = base64.b64encode(photo_response.content).decode('utf-8')
        context['photo_data'] = f'data:image/jpeg;base64,{photo_base64}'
    else:
        # 404时设置默认头像(替换为你的默认图片路径)
        context['photo_data'] = '/static/images/default-avatar.jpg'

    ## 无关代码 ##
    return context

HTML部分无需修改:

<img class="profile_pic" src="{{ photo_data }}" alt="Profile Picture" style="width:100%">

三、冗余代码清理

graph_helper.py中get_user函数里的user.headers['Content-Type'] = 'image/jpeg'完全无用(该接口返回JSON格式的用户信息,并非图片),直接删除即可:

def get_user(token):
    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()

内容的提问来源于stack exchange,提问作者MV-PDM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:13:16