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

如何使用Django调用带Basic Auth的Django REST Framework API

解决Django REST Framework Basic Authentication API调用的Unauthorized错误

错误原因

你的API启用了Basic Authentication,但调用时的requests.get请求未携带任何认证凭据,服务器无法验证身份,因此返回"Unauthorized"错误。

修复代码:添加Basic认证凭据

在请求中加入认证信息,有两种可行方式:

方式1:通过auth参数传入认证信息(推荐)

使用requests库的HTTPBasicAuth类,传入合法的API认证用户名和密码:

from requests.auth import HTTPBasicAuth

def display_clerk_view(request):
    # 替换为你的实际认证用户名和密码
    auth_username = "your_valid_username"
    auth_password = "your_valid_password"
    
    displaytable = requests.get(
        'http://127.0.0.1:8000/Clerk/',
        auth=HTTPBasicAuth(auth_username, auth_password)
    )
    
    # 先检查响应状态,避免解析失败
    if displaytable.status_code == 200:
        jsonobj = displaytable.json()
        return render(request, 'clearance/clerk_view.html', {"ClerkClearanceItems": jsonobj})
    else:
        # 处理认证失败或其他请求错误
        return render(request, 'clearance/error.html', {"message": "认证失败或请求异常"})

方式2:URL嵌入凭据(不推荐,安全性低)

这种方式会将密码暴露在URL中,仅用于测试场景:

displaytable = requests.get('http://your_username:your_password@127.0.0.1:8000/Clerk/')

Basic Authentication 核心机制

Basic Auth是一种简单的HTTP认证协议,流程如下:

  • 客户端向需要认证的API端点发送请求
  • 服务器返回401响应,附带WWW-Authenticate: Basic realm="xxx"响应头,提示需要认证
  • 客户端将用户名:密码拼接后做Base64编码,放在请求头Authorization: Basic <Base64编码字符串>中重新发送请求
  • 服务器解码该字符串,验证用户名密码有效性,通过则返回请求资源

Django REST Framework的BasicAuth组件会自动处理上述流程,你只需确保请求携带正确的认证信息即可。

关于后续接入Google身份提供商(django-allauth)

当你通过django-allauth接入Google OAuth2后,建议将API认证方式切换为Token或OAuth2 Authentication:

  • 用户通过Google登录后,后端生成合法的认证令牌(如JWT)
  • 客户端调用API时,在请求头中携带Authorization: Bearer <令牌>
  • DRF验证令牌有效性后确认用户身份

这种方式比Basic Auth更安全,避免明文传输用户名密码,适合生产环境使用。

内容的提问来源于stack exchange,提问作者Richard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:25:17